1つのScriptに2つクラスを書いたとき どうなるかメモ
はじめに
スクリプトに複数のクラスを書いたとき、その複数のクラスのインスタンスは生成されるのか、AwakeとかStartはよばれるのか、 どうなっているのかよくわからなかったのでテストしながら確認してみるメモ
やってみること
オブジェクトにTest.csスクリプトをアタッチ。
Test.csの中身。TestとTest2の2つのクラスがある、それぞれStart関数でlogを出すようにしている。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Test : MonoBehaviour { // Start is called before the first frame update void Start() { Debug.Log("Test"); } } public class Test2 : MonoBehaviour { private void Start() { Debug.Log("Test2"); } }
結果
Testのみlogが表示される。
考察
TestしかStart関数が呼ばれなかった。 scriptのファイル名と同じ名前のクラスしか、インスタンス生成されない・・・?
やってみること2
Test2のインスタンスは生成されていないのかGetCompornentでみてみる。
TestControllerクラスを同じオブジェクトにアタッチ
TestController.csの中身
using System.Collections; using System.Collections.Generic; using UnityEngine; public class TestController : MonoBehaviour { // Start is called before the first frame update void Start() { Debug.Log(GetComponent<Test>()); Debug.Log(GetComponent<Test2>()); } }
結果
Test2はNull
考察
Test2はnullだった。なのでScriptの名前と同じクラスのみインスタンスが生成されるっぽい。