Unityでスクリプトを作成していてどこかで必要になってくるものの1つに他のスクリプト内で持っているメソッド(関数)にアクセスしたいということがあります。
はじめは少し悩まされましたが、備忘録として書き残しておきたいと思います。
1.他スクリプト内メソッドへのアクセス方法
まずはじめに、アクセスを受ける側のスクリプトとしては、以下のように「functionA」メソッドのあるAbcControllerScriptというクラスを持つものとして「AbcControllerScript.cs」として作成しておきます。
そして、これを「AbcController」という名前をつけたGameObjectにアタッチしておくこととします。
また、アクセスを受ける「functionA」メソッドはpublicで宣言しておきます。
AbcControllerScript.cs
using System.Collections; using System.Collections.Generic; using UnityEngine; public class AbcControllerScript : MonoBehaviour { public void functionA() {
Debug.Log("functionA");
} }
これに対して、アクセスする側のスクリプトは、以下のようになります。
先程のスクリプト「AbcController.cs」をアタッチしたオブジェクト「AbcController」をFind()で洗い出し、さらに、洗い出したオブジェクトのスクリプトを変数に代入しています。
最後にそのスクリプトを代入した変数に対して「変数.関数()」のような形で指定することでfunctionA()関数を実行することですることができるというものです(()の中に引数を入れることなども可)。
DefControllerScript.cs
using System.Collections; using System.Collections.Generic; using UnityEngine; public class DefControllerScript : MonoBehaviour { private GameObject abcControllerObject;
AbcControllerScript abcControllerScript; // Start is called before the first frame update void Start() { // //残り時間タイマー用
abcControllerObject = GameObject.Find("AbcController");
abcControllerScript = abcControllerObject.GetComponent<AbcControllerScript>(); abcControllerScript.functionA(); } }
以上が他のスクリプト内で持っているメソッド(関数)にアクセスする方法になります。