Unity でプレハブを Instantiate した後、そのオブジェクトに対して何かしらの操作を加えたい、ということはよくあるのではないでしょうか。
しかし、Instantiate で返されるオブジェクトは Object 型のためそのままでは操作できません。以下のようにキャストをかける必要があります。
InstantiateTest.cs
using UnityEngine;
public class InstantiateTest : MonoBehaviour {
[SerializeField]
private GameObject pref;
void Start () {
var go = Instantiate(pref) as GameObject ;
}
}
インスタンス化するオブジェクトに Rigidbody をアタッチしていて Rigidbody を操作したい場合、以下のようなコードを書くかと思いますが、このままではコンパイルが通りません。
InstantiateTest.cs
using UnityEngine;
public class InstantiateTest : MonoBehaviour {
[SerializeField]
private GameObject pref;
void Start () {
var rb = Instantiate(pref) as Rigidbody; // ここでエラー.
}
}
これは、 pref
が GameObject 型として割り当てられているためです。これを解決する方法は2つ考えられます。
1.GameObject にキャストした後にさらに任意の型を GetComponent
InstantiateTest.cs
using UnityEngine;
public class InstantiateTest : MonoBehaviour {
[SerializeField]
private GameObject pref;
void Start () {
var rb = (Instantiate(pref) as GameObject).GetComponent<Rigidbody>();
}
}
2.pref
の型を変換したいものにしておく
InstantiateTest.cs
using UnityEngine;
public class InstantiateTest : MonoBehaviour {
[SerializeField]
private Rigidbody pref;
void Start () {
var rb = Instantiate(pref) as Rigidbody;
}
}