Unityにて、何かしらボタンをクリックした際に、オブジェクトにアクションさせ、アクション後に次のアクションを実行させるようにswitch文を作成しました。ただ、その分岐が機能せず、ランダムでcase内容が出力されてしまいます。
エラーなどは発生しておりません。
どのようにswitch文のcase内容を順に実行するようにできるでしょうか。
ご教示いただければ幸いです。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class EnemyManager : MonoBehaviour { Vector3 MOVEX = new Vector3(1.0f, 0, 0); Vector3 MOVEY = new Vector3(0, 1.0f, 0); Vector3 MOVEZ = new Vector3(0, 0, 1.0f); float step = 2f; // 移動速度 Vector3 target; // 入力受付時、移動後の位置を算出して保存 Vector3 prevPos; // 何らかの理由で移動できなかった場合、元の位置に戻すため移動前の位置を保存 private enum MoveType { FORWARD_1 = 0, // 前進1 UP = 1, // 左へ FORWARD_2 = 2, // 前進2 Z = 3 // 右へ } private MoveType moveType = MoveType.FORWARD_1; // Use this for initialization void Start() { target = transform.position; } // Update is called once per frame void Update() { // ① 移動中かどうかの判定。移動中でなければ入力を受付 if (transform.position == target) { switch (moveType) { case MoveType.FORWARD_1: SetTargetPosition(); moveType++; break; case MoveType.UP: SetTargetPosition1(); moveType++; break; case MoveType.FORWARD_2: SetTargetPosition2(); moveType++; break; case MoveType.Z: SetTargetPosition3(); moveType=0; break; } } Move(); } // ② 入力に応じて移動後の位置を算出 void SetTargetPosition() { prevPos = target; if (Input.anyKeyDown) { target = transform.position + MOVEX; return; } } void SetTargetPosition1() { prevPos = target; if (Input.anyKeyDown) { target = transform.position + MOVEY; return; } } void SetTargetPosition2() { prevPos = target; if (Input.anyKeyDown) { target = transform.position + MOVEX; return; } } void SetTargetPosition3() { prevPos = target; if (Input.anyKeyDown) { target = transform.position + MOVEZ; return; } } // ③ 目的地へ移動する void Move() { transform.position = Vector3.MoveTowards(transform.position, target, step * Time.deltaTime); } }
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/30 00:06
2020/07/30 01:13
2020/07/30 07:32