プレファブからインスタンスを作成し、そのタイミングでデータを渡す方法

様々な方法がありますが、ここでは、GameObject.FindメソッドやGetComponentを使わない方法を考えます

サンプル

Unity バージョン

2021.2.7f1

オブジェクトの構成

シーン

InspectorでSampleスクリプトにアウトレット接続するCubeScriptには、Cubeプレファブをドラッグ&ドロップします
型がCubeScript型のため、コンポーネント(今回はスクリプト)が自動で代入されます

プレファブ

コード

using UnityEngine;

public class CubeScript : MonoBehaviour
{
    int data;

    public void Initialize(int data)
    {
        this.data = data;
    }
}
using UnityEngine;

public class Sample : MonoBehaviour
{
    [SerializeField]
    CubeScript cubeScript;

    void Start()
    {
        Instantiate(cubeScript).Initialize(3);
    }
}

解説

Instantiateメソッドでオブジェクト作成する際、引数としてプレファブオブジェクトではなく、コンポーネント(今回はスクリプト)を取リます。
作られたオブジェクトのInitializeメソッドを呼び出すとき引数付きで呼ぶことで、データを渡すことができます。
これは、C#でインスタンスを作るときの引数付きコンストラクタの機能に似たことをしていることになります。

Unity

Posted by hidepon