すごく今更ですが、逆引きできるものが見つけらなかったので備忘録としてまとめときます。
コメントについて有識者様のご助言いただけますと幸いです。よろしくお願いいたします。
親の local 座標の(0, 0, 0)に生成
Instantiate(prefab, parentTransform);
Instantiate(prefab, parentTransform, false);
world 座標の(0, 0, 0)に生成
Instantiate(prefab, parentTransform, true);
これ何に使えるんだろう...
親の local 座標の任意位置に生成
GameObject obj = Instantiate(prefab, new Vector3(1, 2, 3), Quaternion.identity);
obj.transform.SetParent(parentTransform, false);
GameObject obj = Instantiate(prefab, parentTransform);
obj.transform.Translate(1, 2, 3);
obj.transform.Rotate(0, 0, 0, Space.Self);
割と頻出処理な気がするんですが、Instantiate()一発でいけないんでしょうか
world 座標の任意位置に生成
Instantiate(prefab, new Vector3(1, 2, 3), Quaternion.identity, parentTransform);
GameObject obj = Instantiate(prefab, parentTransform);
obj.transform.SetPositionAndRotation(new Vector3(1, 2, 3), Quaternion.identity);
まとめ
Instantiate(prefab, parentTransform)
で親子関係だけ定義して、そのあとに Transform.Translate()
+Transform.Rotate()
か、SetPositionAndRotation()
で、位置+回転を定義するのが、シンプルで混乱が少なくて良さそうに見えます。ただし、Updete()ループ内で Instanciate()と同時指定しない位置設定は、次の FixedUpdate() が呼ばれないと更新されないらしいので、少し意識する必要はありそうです。