uGUIでSetParent(null)を使ってはいけない?
uGUIでSetParent(null)を使ってはいけないのでしょうか?
Unity4.6から、TransformにSetParentというメソッドができて、parent=としていた記述は、「SetParentを使うように」というwarningがでていると思います。
warningにしたがってコードを修正したのですが、parent=null; としていたのを SetParent(null)とすると、潜在的に不具合を抱えたままゲームが進行して何かのきっかけでバグるようです。自分のアプリではほぼ再現率100%でUnityエディタがクラッシュする手順があります。ただ似たようなロジックのところでは正常に動作するため、どういう要素が影響しているかまではわかりませんでした。
SetParent(null)を使用していたのは、子オブジェクトを全部削除するときで、このように書いていました。
//SetParent(null)の書き方だとどうもマズイ模様
while (parent.childCount > 0)
{
Transform child = parent.GetChild(0);
child.SetParent(null);
GameObject.Destroy(child.gameObject);
}
このように変えたら直りました。
//書き方を変更
foreach(Transform t in this.transform)
{
Destroy(t.gameObject);
}
SetParent(null)としていたのは、削除したときに、parent.childCountもちゃんとゼロになるようにしたかったからです。 GameObject.Destroyだけでは、1フレーム後じゃないと子オブジェクトが削除されないらしく、明示的にparent=nullとすることで子オブジェクトから外れるようにしていたのですが、.SetParent(null)とした場合は不正な処理になるようです。