Booleanの真偽について、他のオブジェクト内にあるスクリプトを参照して取得してみましょう。
他のスクリプトのBoolを取得する方法について、3つの方法を試してみます。
今回の例では、ぶつかればCubeのほうでBoolのフラグを立て、trueのときにCubeを削除します。
オブジェクトの準備
まずは、SphereとCubeの2つを作成します。
Sphereにリジッドボディを追加します。
CubeAccept.csと、SphereMove.csを作成し、それぞれのオブジェクトに追加します。
①instanceを使って取得する方法
instanceを使用してアクセスし、boolを取得します。
まずはCube(Boolフラグを立てる側)のスクリプトを書きます。
CubeAccept.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 CubeAccept : MonoBehaviour { public static CubeAccept instance; public bool isTouched; public void Awake() { if(instance == null) { instance = this; } } void Start() { isTouched = false; } void OnCollisionEnter(Collision other) { if(other.gameObject.name == "Sphere") { isTouched = true; } } } |
続いて、Sphere(Boolにアクセスする側)のスクリプトを書きます。
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 { void Update() { if(CubeAccept.instance.isTouched) { Destroy(gameObject); } float dx = Input.GetAxis("Horizontal") * 0.1f; float dz = Input.GetAxis("Vertical") * 0.1f; transform.position = new Vector3 ( transform.position.x + dx, 0, transform.position.z + dz ); } } |
ゲームプレイしてみましょう。
CubeAcceptクラスにアクセスして、isTouchedを取得。
isTouchedがtrueになれば、Sphereオブジェクトが消えます。
②Findで参照する方法
GameObject.Findを使って、他のBoolを取得してみましょう。
Cube(Boolフラグを立てる側)から作成します。
CubeAccept.csを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CubeAccept : MonoBehaviour { public bool isTouched; void Start() { isTouched = false; } void OnCollisionEnter(Collision other) { if(other.gameObject.name == "Sphere") { isTouched = true; } } } |
プレーヤーのSphere(Boolにアクセスする側)のスクリプトを作成します。
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 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class SphereMove : MonoBehaviour { public GameObject cube; void Start() { cube = GameObject.Find("Cube"); } void Update() { if(cube.GetComponent<CubeAccept>().isTouched) { Destroy(gameObject); } float dx = Input.GetAxis("Horizontal") * 0.1f; float dz = Input.GetAxis("Vertical") * 0.1f; transform.position = new Vector3 ( transform.position.x + dx, 0, transform.position.z + dz ); } } |
ゲームプレイしてみましょう。
Cubeに触れるとisTouchのフラグが立ちます。
これを取得したSphereが削除されます。
③直接フィールドに入れて参照する方法
続いて、直接フィールドに入れて、他のスクリプトのBoolを取得できるようにしましょう。
Cube(Boolフラグを立てる側)から作成します。
CubeAccept.csを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CubeAccept : MonoBehaviour { public bool isTouched; void Start() { isTouched = false; } void OnCollisionEnter(Collision other) { if(other.gameObject.name == "Sphere") { isTouched = true; } } } |
プレーヤーのSphere(Boolにアクセスする側)のスクリプトを作成します。
SphereMove.csを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class SphereMove : MonoBehaviour { public CubeAccept cubeAccept; void Update() { if(cubeAccept.isTouched) { Destroy(gameObject); } float dx = Input.GetAxis("Horizontal") * 0.1f; float dz = Input.GetAxis("Vertical") * 0.1f; transform.position = new Vector3 ( transform.position.x + dx, 0, transform.position.z + dz ); } } |
フィールドに、Cubeオブジェクトを入れます。
ゲームプレイしてみましょう。
Cubeに触れるとisTouchのフラグが立ちます。
これを取得したSphereが削除されます。