他のオブジェクトのにある関数を実行する方法について、3つの方法を試してみましょう。
今回は、Cubeをクリックすれば、Sphereが消える仕組みをつくります。
CubeとSphereを用意します。
CubeClick.csとSphereDisplay.csを作成し、それぞれのオブジェクトに追加しています。
関連記事:
他のスクリプトのBoolを取得する
他のスクリプトの変数を取得する
他のオブジェクトの配列を取得する
Resources.Loadを使ったファイル指定
①instanceを使う方法
Sphere側(アクセスされる側)のスクリプト
SphereDisplay.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 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class SphereDisplay : MonoBehaviour { public static SphereDisplay instance; public void Awake() { if(instance == null) { instance = this; } } void Start() { gameObject.SetActive(true); } public void Destroy() { gameObject.SetActive(false); } } |
Cube側(アクセスする側)のスクリプト
CubeClick.csを記述します。
1 2 3 4 5 6 7 8 9 10 11 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CubeClick : MonoBehaviour { void OnMouseDown() { SphereDisplay.instance.Destroy(); } } |
ゲームプレイして、Cubeをクリックしてみましょう。
②Findで参照する方法
Sphere側(アクセスされる側)のスクリプト
SphereDisplay.csを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class SphereDisplay : MonoBehaviour { void Start() { gameObject.SetActive(true); } public void Destroy() { gameObject.SetActive(false); } } |
Cube側(アクセスする側)のスクリプト
CubeClick.csを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CubeClick : MonoBehaviour { public GameObject sphere; void Start() { sphere = GameObject.Find("Sphere"); } void OnMouseDown() { sphere.GetComponent<SphereDisplay>().Destroy(); } } |
ゲームプレイして、Cubeをクリックしてみましょう。
③直接フィールドに入れて参照する方法
Sphere側(アクセスされる側)のスクリプト
SphereDisplay.csを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class SphereDisplay : MonoBehaviour { void Start() { gameObject.SetActive(true); } public void Destroy() { gameObject.SetActive(false); } } |
Cube側(アクセスする側)のスクリプト
CubeClick.csを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CubeClick : MonoBehaviour { public SphereDisplay sphereDisplay; void OnMouseDown() { sphereDisplay.Destroy(); } } |
SphereDisplayのフィールドに、Sphereオブジェクトを入れます。
ゲームプレイして、Cubeをクリックしてみましょう。
以上今回は、instanceを使う、Findで参照する、直接フィールドに入れるといった、他のオブジェクトにあるスクリプトのメソッド実行方法を作ってみました。
ただし、②Findで参照する方法や、③直接フィールドに入れる方法では、アクセスされる側のオブジェクトが非表示の場合、そもそも取得ができません。
①instanceを使う方法を行えば、スムーズに関数を実行できるのでおすすめです。
他のスクリプトの関数を実行するしくみは、いろいろなシーンで活用できます。
関連記事:
他のスクリプトのBoolを取得する
他のスクリプトの変数を取得する
他のオブジェクトの配列を取得する
Resources.Loadを使ったファイル指定