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の名前と同じクラスのみインスタンスが生成されるっぽい。