他のオブジェクトが動いている間、自分は動くことができないように、スクリプトを作ってみましょう。
往復運動を繰り返しては、2秒間ストップするCube。
Cubeが止まっているときだけ、Sphereを移動可能にします。
関連記事:
1秒経過しなければクリックで実行できない
相手オブジェクト移動中のフラグ
CubeとSphereを作成し、少し距離を取ります。
Cubeの往復運動と、2秒間ストップの動きをつけます。
CubeMove.csを作成し、Cubeに追加します。
CubeMove.csを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CubeMove : MonoBehaviour { public static CubeMove instance; private int counter = 0; private float move = 0.05f; public bool moveBool; public void Awake() { if(instance == null) { instance = this; } } void Start() { StartCoroutine("CubeStart"); moveBool = true; } IEnumerator CubeStart() { while (true) { Vector3 p = new Vector3(0, 0, move); transform.Translate(p); yield return new WaitForSeconds(0.01f); counter++; if (counter == 100) { counter = 0; move *= -1; moveBool = false; yield return new WaitForSeconds(2.0f); moveBool = true; } } } } |
CubeMoveクラスのbool変数を取得できるように、instanceを作成しました。
2秒間待つ直前に、moveBoolをfalseにして、2秒経過すればtrueに変更します。
続いて、Sphereの動きを作りましょう。
PlayerMove.csを作成し、Sphereに追加します。
PlayerMove.csを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerMove : MonoBehaviour { void Update() { if(!CubeMove.instance.moveBool){ if (Input.GetKey(KeyCode.UpArrow)) { transform.Translate(0f, 0f, 0.1f); } if (Input.GetKey(KeyCode.DownArrow)) { transform.Translate(0f, 0f, -0.1f); } if (Input.GetKey(KeyCode.LeftArrow)) { transform.Translate(-0.1f, 0f, 0f); } if (Input.GetKey(KeyCode.RightArrow)) { transform.Translate(0.1f, 0f, 0f); } } } } |
ゲームプレイして、Sphereを動かしましょう。
CubeMoveクラスの、moveBoolを取得。
moveBoolがfalseの時のみ、十字キー操作で移動できるようにしています。
関連記事:
1秒経過しなければクリックで実行できない