プレハブをInstantiate()する際にTweenのエラーが出てしばらくはまってしまった。
NullReferenceException: Object reference not set to an instance of an object
iTween.RetrieveArgs () (at Assets/iTween/Plugins/iTween.cs:6811)
iTween.Awake () (at Assets/iTween/Plugins/iTween.cs:6559)
UnityEngine.Object:Instantiate(Object)
インスペクタ上で生成したいプレハブを設定する際に、自身のプレハブと同じものを設定しました。
期待としては自身のプレハブが増殖することを期待していたんだけど、プレハブの状態ではなく自分のGameObjectの状態で複製された。
自身のGameObjectにはiTweenコンポーネントが追加されていたので、新たなGameObjectをInstantiate()する際にもiTweenコポーネントが追加された状態で生成されてしまっていたため上記のエラーがでていたようです。
そこで、今回は自身のGameObjectをDestroy()するものだったので、その前にiTweenもDestroyしてから複製してみました。
ただ、Destroyして即座にInstantiate(thisPrefab)してもダメだったので1フレーム待ってやってみたところエラーを回避できました。
なんとなくこんな感じです。
public override void OnCollisionEnter2D(Collision2D collision) {
base.OnCollisionEnter2D(collision);
foreach (iTween tween in this.dividePrefab.GetComponents<iTween>()) {
Destroy(tween);
tween.enabled = false;
}
StartCoroutine(this.CreateDivide());
}
IEnumerator CreateDivide() {
yield return new WaitForEndOfFrame();
for (int i = 0; i < 4; ++i) {
GameObject divideGO = (GameObject)Instantiate(this.dividePrefab);
}
Destroy(this.gameObject);
}
Destroyしない場合はもう少し工夫が必要か、自身のプレハブとは別のプレハブを用意するなどが必要そうです。
自身のGameObjectのプレハブを取得する方法ってのはないんですかね??