いんでぃーづ

個人でゲーム開発してる上で吸収したモノたち紹介。UnityからGIMPまでなんでも。デザインとかゲーム論まで語っちゃうよ的なアレ。

MENU

Unity : プレハブに保存した値を Instantiate せずに直接読む

{スポンサーリンク}
{スポンサーリンク}

プロジェクトフォルダにあるPrefabから、Instantiate せずに各種コンポーネントを取得したかったメモ。

Inspectorからリンクしている場合

シーン内にあるGameObjectと同様に、GetComponent メソッドでコンポーネントを取得、参照できます。
インスペクタから設定済みの数値もそのまま取得可能。

   public GameObject Prefab;   // 対象のプレハブ

    void Start () {
               // Rigidbodyコンポーネントを取ってみる
        Rigidbody rigidbody = Prefab.GetComponent<Rigidbody> ();
        Debug.Log ("prefab mass : "+rigidbody.mass);

        // アタッチしているスクリプトも取得できる
        TestPrefabScript fromPrefab = Prefab.GetComponent<TestPrefabScript> ();
        Debug.Log ("from script : "+fromPrefab.Point);
    }

Resourcesにある場合

Resource.Load で読み込んだアセットからGetComponentできます。
ポイントは、Loadの第二引数に type を指定することで任意のコンポーネントを直接参照できること。GameObject.Instantiateは不要です。

   // Resourcesにあるプレハブから
    Rigidbody resourceRigidbody = Resources.Load ("TestResource", typeof(Rigidbody)) as Rigidbody;

    Debug.Log ("prefab mass : "+resourceRigidbody.mass);

    // 同様にスクリプトも参照可能
    TestPrefabScript fromResource = Resources.Load ("TestResource", typeof(TestPrefabScript)) as TestPrefabScript;
    Debug.Log ("from resource : "+fromResource.Point);

Amazon.co.jpアソシエイト