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

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

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

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

Unity3D

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

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

1407閲覧

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

ponkotu

総合スコア13

C#

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

Unity3D

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

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

1クリップ

投稿2019/07/24 16:18

編集2019/07/25 03:48

###前提・実現したいこと
アニメーション中は追跡プログラムをプログラム解除したいです。
###質問の内容
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; 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) { enemyHP = enemyHP - 1; animator.SetTrigger("die"); i = 1; } } } }

###言語名 C#

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

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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Y0241-N

2019/07/25 00:53

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

2019/07/25 04:52

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

2019/07/25 09:44

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

2019/07/26 00:31

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

回答1

0

ベストアンサー

フラグで管理すればいいと思います

bool isAlive = true; IEnumerator MoveCoroutine(){ while(loopcoroutine){ if(isAlive)this.gameObject.transform.position = Vector3.MoveTowards(this.gameObject.transform.position, targetObj.transform.position, speed); ... } }

ところで、前にあるx_Abs > 0~ は何を意図しているんでしょう
すべてが0のとき、while文を抜けるみたいですが、2つのオブジェクトが全く同じ位置に偶然来ることはほぼありえません
(片方のオブジェクトの座標を代入した場合は除く)

投稿2019/07/26 01:32

izmktr

総合スコア2856

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ponkotu

2019/07/26 10:34

ご指摘ありがとうございます。フラグのリセットはどの部分ですればいいのでしょうか。アニメーションを呼んだ後に置いてみましたが、うまくいきませんでした。
izmktr

2019/07/26 14:47

再度、移動してほしいと思うタイミングでリセットすればいいと思います
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問