動き続けるオブジェクトを、他のオブジェクトから止められる仕組みを作ってみましょう。
Updateの中で、上下運動をくり返すSphere。
Cubeを操作し、Capsuleに触れた際に、Bool変数をtrueに変えます。
このboolを、Sphere側で取得し、Sphereの動きを停止させます。
関連記事:他のスクリプトのBoolを取得する
他のオブジェクトのBoolを取得し、動作を止める
Cube、Sphere、Capsuleを作成し、それぞれを横並びに配置します。
Cubeにリジッドボディを追加し、Use Gravityのチェックを外します。
Capsuleのトリガーにするのチェックにチェックを入れます。
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 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CubeMove : MonoBehaviour { public bool isStop; void Start() { isStop = false; } void Update() { if(!isStop) { if (Input.GetKey(KeyCode.LeftArrow)) { transform.Translate(-0.1f, 0f, 0f); } if (Input.GetKey(KeyCode.RightArrow)) { transform.Translate(0.1f, 0f, 0f); } } } void OnTriggerEnter(Collider other) { if (other.gameObject.name == "Capsule" ) { isStop = true; } } } |
続いて、SphereMove.csを作成し、Sphereに追加します。
SphereMove.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 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class SphereMove : MonoBehaviour { int count = 0; float move = 0.05f; public GameObject cube; void Start() { cube = GameObject.Find("Cube"); } void Update() { if(cube.GetComponent<CubeMove>().isStop == false){ Vector3 i = new Vector3(0, move, 0); transform.Translate(i); count++; if (count == 100) { count = 0; move *= -1; } } } } |
ゲームプレイしてみましょう。
Capsuleにぶつかった時点で、isStopのフラグがtrueに変換。
Sphere側でisStopのフラグを参照し、こちらもtrueのタイミングで、動きが停止します。
関連記事:他のスクリプトのBoolを取得する