前提・実現したいこと
現在unityを使用して横スクロール2Dアクションゲームを制作しています。
そして画面内に入ると数秒の溜めの後地上を走って突進してくるエネミーを作ろうとしたところ、なかなかうまくいきません。
仕様としてはエネミーのvelocityをコルーチンで操作して動かすようなものです。
しかし、そもそも動かなかったり、それ以前の取り組みでは限りなく追尾してくるなど難航しています。
発生している問題・エラーメッセージ
仕様としてはエネミーのvelocityをコルーチンで操作して動かすようなものです。
しかし、そもそも動かなかったり、それ以前の取り組みでは限りなく追尾してくるなど難航しています。
該当のソースコード
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Enemy3 : MonoBehaviour { #region//インスペクターで設定する [Header("移動速度")] public float speed; [Header("重力")] public float gravity; public GameObject player; #endregion float playerPos; #region//プライベート変数 private Rigidbody2D rb = null; private SpriteRenderer sr = null; private Animator anim = null; bool right; Transform rbs; int xVector; float chargeTime = 0.0f; #endregion // Start is called before the first frame update void Start() { rb = GetComponent<Rigidbody2D>(); sr = GetComponent<SpriteRenderer>(); anim = GetComponent<Animator>(); rbs = player.GetComponent<Transform>(); } void FixedUpdate() { anim.SetBool("walk", false); //デフォルトの立ちモーションに遷移。 if (sr.isVisible) { playerPos = rbs.position.x; if (playerPos - transform.position.x > 0) { right = true; } else { right = false; } //↑プレイヤーがどちらにいるか判断。 if (right) { transform.localScale = new Vector3(1, 1, 1); StartCoroutine(Charge(1)); //プレイヤーの向きにアニメーションを反転させ、引数を入れてコルーチン開始。 } //プレイヤー左にいる else { transform.localScale = new Vector3(-1, 1, 1); StartCoroutine(Charge(-1)); //プレイヤーの向きにアニメーションを反転させ、引数を入れてコルーチン開始。 } } } IEnumerator Charge(int xVector) { chargeTime = 0;//---------------New! yield return new WaitForSeconds(3.0f); Debug.Log("コルーチン開始"); //三秒待って処理開始。 anim.SetBool("walk", true); rb.velocity = new Vector2(xVector * speed, -gravity); Debug.Log("移動");//----------New! //アニメーションを移動に遷移させ、さらに引数の方向へ設定したスピードで動かす。 chargeTime += Time.deltaTime; if (chargeTime > 3.0f) { //二秒間突進して終了 Debug.Log("コルーチン終了");//---------------New! yield break; } } }
試したこと
MoveTowardsメソッドなども使用してみましたが、限りなく追尾してくるのでうまくいきません。
また、前述のメソッドはY軸方向にも動いてしまうので地上のみ移動してほしいという仕様に合いませんでした。
よいアイデアがあればどなたかご教授お願いします。
補足情報(FW/ツールのバージョンなど)
Unityの2019 2,9f1 personal
コーディングはVisualStudio2019にて行っています。
至らぬ点がありましたら追記修正させていただきます。
どうぞよろしくお願いします。
追記
コルーチンの始まりでチャージタイムを初期化するようにして、デバッグログに移動、コルーチン終了を加えました。(Newで示してあります)
各デバッグログの動作状況としては、コルーチン開始、移動は動作するものの、コルーチン終了のデバッグが動作していません。
また、それ以前の部分についてはスケールによる振り向きが遅滞なく行われるので、rightフラグの設定には問題はないものと思われます。
それからコルーチン内のspeedはパブリックメンバーのspeedと同じであることを確認し、それにインスペクタ上で10が格納されていることを確認いたしました。
情報が至らずご迷惑をおかけしました。
すみません。
回答1件
あなたの回答
tips
プレビュー