質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

解決済

アニメーション中の移動を止めたいです。

ponkotu
ponkotu

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

1回答

0評価

1クリップ

22閲覧

投稿2019/07/24 16:18

編集2022/01/12 10:58

#前提・実現したいこと
#アニメーション中は追跡プログラムをプログラム解除したいです。
##質問の内容
##unityで敵がターゲットを追跡するシステムと、弾に当たるとダメージ表示のアニメーションをするシステムをを作っています。当たり判定とアニメーションが行われる部分の変数を変えてみても、同部分で移動速度を0に変更しても、アニメーションをしたまま引きずられるように移動してしまいます。どうすれば、アニメーション中の移動を止めることができますか。
###発生している問題・エラーメッセージ
###敵オブジェクトのダメージ表示のアニメーション中に敵オブジェクトの追跡システムを止めれないことです。
###エラーメッセージ
ありません。

該当のソースコード

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class tuiseki : MonoBehaviour
{

public GameObject targetObj;//ターゲット public GameObject explosion;//追いついたときに爆発 GameObject Red; RedLifeScript script; public GameObject bullet;//弾 public int enemyHP = 3;//敵オブジェクトのライフ public Animator animator; int i = 0;//updateを止めるための変数 public Coroutine coroutine;//追跡システムの準備 float x_Abs; float y_Abs; float z_Abs; [SerializeField] float speedParameter = 1; void Start() { Red = GameObject.Find("KadukiRedHairPrefab");//ターゲットオブジェクト script = Red.GetComponent<RedLifeScript>(); animator = GetComponent<Animator>(); } void Update() { if (i == 1) { enabled = false; } x_Abs = Mathf.Abs(this.gameObject.transform.position.x - targetObj.transform.position.x); y_Abs = Mathf.Abs(this.gameObject.transform.position.y - targetObj.transform.position.y); z_Abs = Mathf.Abs(this.gameObject.transform.position.z - targetObj.transform.position.z); if (coroutine == null)//追跡システム { coroutine = StartCoroutine(MoveCoroutine()); }

}

IEnumerator MoveCoroutine()

{
float speed = speedParameter * Time.deltaTime;

while (x_Abs > 0 || y_Abs > 0 || z_Abs > 0) { yield return new WaitForEndOfFrame(); this.gameObject.transform.position = Vector3.MoveTowards(this.gameObject.transform.position, targetObj.transform.position, speed); } print("重なった");

}

void OnTriggerEnter(Collider other) { //ターゲットにしたオブジェクトにタグをつけとく!! if (other.gameObject.tag == "Target") { Debug.Log (other.name + "Enter"); Instantiate(explosion, this.transform.position, Quaternion.identity); this.gameObject.SetActive(false); script.HP = script.HP - 1; script.damage();//ターゲットのダメージ表示 } else if (other.gameObject.tag == "Bullet") { i = 1; if (enemyHP <= 0) { this.gameObject.SetActive(false); } else if(enemyHP==1) { enemyHP = enemyHP - 1; animator.SetTrigger("die"); } else if (enemyHP == 2) { enemyHP = enemyHP - 1; animator.SetTrigger("die"); } else if (enemyHP == 3) {

#言語名 C#

##試したこと
##invokeをアニメーションをさせる部分の前にいれてみました。
弾との当たり判定の後に敵オブジェクトのの移動速度を0にする部分をつくってみました。

補足情報(FW/ツールのバージョンなど)

unityは2019.14f1のバージョンです。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

Y0241-N
Y0241-N

2019/07/25 00:53

ひとまず質問の形式が崩れて見辛くなっているので、修正してみてください。 \(###\)シャープの隣に文字を書くと表題になります。文字の大きさはシャープの個数で変更できます。 \(``` コード ```\)スクリプトは\(```\)で挟んで記入すると、システムコード表記となり、見やすくなります。
sakura_hana
sakura_hana

2019/07/25 04:52

Debug\.Logを各所で仕込んで原因を特定してください。 例えば「this\.gameObject\.transform\.position = Vector3\.MoveTowards〜」が呼ばれ続けていないか? 他の部分で移動しそうな要素は無いか?(アニメーション自体で移動させていないか) などを確認してみてください。
ponkotu
ponkotu

2019/07/25 09:44

返信ありがとうございます。原因は(Move Towards)の部分がアニメーション中も実行されていることでした。どうしたら、アニメーション中だけ(MoveTowards\)の部分部分を止めることができますか?
sakura_hana
sakura_hana

2019/07/26 00:31

MoveTowardsをif文で囲んで「アニメ中ではなかったら」という条件を加えればいいです。 「unity アニメーション 再生中か」などでググってみてください。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。