他のオブジェクトにあるスクリプトを、非アクティブにしてみましょう。
Sphereが往復運動をくり返しています。
Cubeを操作して、Capsuleにぶつかると、Sphereの動きが止まります。
Sphereに追加した往復運動のスクリプトを無効化することで、動きを止めています。
関連記事:
同一オブジェクトのスクリプトを無効化する
他のスクリプトの変数を取得する
他のスクリプトの関数を実行する
他のスクリプトのBoolを取得する
制限時間になれば停止する
Sphereの動き
Sphere、Cube、Capsuleを作成します。
横並びに配置し、Sphereは少し手前に移動させました。
Capsuleの、トリガーにするにチェックを入れます。
リジッドボディを追加し、UseGravityのチェックを外します。
Sphereを往復運動させます。
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 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class SphereMove : MonoBehaviour { private int counter = 0; private float move = 5.0f; void Update() { transform.Translate(new Vector3(0, 0, move * Time.deltaTime)); counter++; if (counter == 100) { counter = 0; transform.Rotate(new Vector3(0, 180, 0)); } } } |
他のスクリプトを無効にする
他のオブジェクトのスクリプトについて、無効化できるしくみを作ります。
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 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CubeMove : MonoBehaviour { [SerializeField] GameObject sphere; private float speed = 3.0f; void Start() { sphere = GameObject.Find("Sphere"); } void Update() { float moveX = Input.GetAxis("Horizontal") * Time.deltaTime * speed; float moveZ = Input.GetAxis("Vertical") * Time.deltaTime * speed; transform.position = new Vector3 ( transform.position.x + moveX, 0, transform.position.z + moveZ ); } void OnTriggerEnter(Collider other) { if (other.gameObject.name == "Capsule") { sphere.GetComponent<SphereMove>().enabled = false; } } } |
ゲームプレイしましょう。
Cubeを操作し、Capsuleにぶつかります。
ぶつかった瞬間、SphereMove.csがオフになり、Sphereの動きが止まります。
関連記事:
同一オブジェクトのスクリプトを無効化する
他のスクリプトの変数を取得する
他のスクリプトの関数を実行する
他のスクリプトのBoolを取得する
制限時間になれば停止する