プロジェクトフォルダにある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);