こんにちは、ともくんのゲーム作り部屋にようこそ!
このページでは、
「UnityでInstantiateで生成するオブジェクトの親を指定したい!」
「親オブジェクトの中で生成したオブジェクトを管理できないの?」
というお悩みの方に向けた内容となっています。
Prefabの生成などで使われるInstantiate関数は、新たにオブジェクトを生成することができるメソッドです。
ただ、そのまま使うと、シーン配下の最上位の階層でオブジェクトが生成されることになります。
例えば、手に持たせるアイテムや、動いているステージの上に表示させる敵など、特定の親オブジェクトの中で生成したいという場合があると思います。
そこでこのページでは、Instantiate関数で生成したオブジェクトに特定の親を指定して生成する方法を紹介していきます。
なお、このページでは、
Windows11
Unity Hub3.11.0
Unity6
のバージョンで解説しています。
また、Instantiate関数については、以下の記事でもまとめていますので、参考にしてみてください。
Instantiate関数で親を指定する方法
Instantiate関数で生成するオブジェクトの親を指定する方法として、
- Instantiateの引数に親を指定する
- Instantiateで生成された後に親を指定する
という2つの方法があります。
Instantiateの引数に親を設定する
Instantiate関数は、引数に生成したいオブジェクトを指定しますが、第二引数に親を指定することで、特定の親の中にオブジェクトを生成することができます。
Instantiate(生成したいオブジェクト, 親オブジェクトの指定);
この親オブジェクトの指定は、Transform型で指定していく必要があります。
using UnityEngine;
public class InstantiateManager : MonoBehaviour
{
public GameObject player; // 元のオブジェクトを参照する変数
public Transform parent; // 指定する親オブジェクトを参照する変数
void Start()
{
Instantiate(player, parent); // 第二引数に親オブジェクトを指定する
}
}
6行目でTransform型の変数をpublicで宣言して、10行目でInstantiate関数の第二引数に親オブジェクトとして指定します。
そして、スクリプトをアタッチしたオブジェクトのインスペクターウィンドウ上で、宣言した変数を探して、

その変数の右側に親にしたいオブジェクトをドラッグ&ドロップしてきます。
これで、指定した親オブジェクトの中で新たに生成することができました。
なお、Instantiate関数は、さらに第三引数にbool値を付けることで、trueであればそのオブジェクトのワールド座標を維持させるということができます。
Instantiate(生成したいオブジェクト, 親オブジェクトの指定, ワールド座標を維持させるかどうか);
生成された後に親を指定する(transform.parent)
Instantiate関数でオブジェクトが生成された後に、transform.parentで親を指定することで同じことができます。
transform.parent = 指定したい親オブジェクト;
transform.parentも、指定したい親のオブジェクトをTransform型で設定します。
using UnityEngine;
public class InstantiateManager : MonoBehaviour
{
public GameObject player; // 元のオブジェクトを参照する変数
public Transform parent; // 指定する親オブジェクトを参照する変数
void Start()
{
GameObject clonePlayer = Instantiate(player); // 生成したオブジェクトを変数に代入する
clonePlayer.transform.parent = parent; // 親オブジェクトを指定する
}
}
先ほどと同じく、6行目でTransform型の変数をpublicで宣言し、Instantiate関数の実行後の11行目でtransform.parentで親の指定を行っています。
スクリプトがアタッチされているオブジェクトのインスペクターウィンドウで、Transform型の変数に親オブジェクトをドラッグ&ドロップします。
この方法でも、指定した親オブジェクトの中で生成することができました。
まとめ
このページでは、UnityのInstantiate関数で生成するオブジェクトの親を指定する方法について紹介していきましたが、いかがでしたでしょうか?
Instantiate関数で生成したオブジェクトに親を指定する場合は、
- Instantiate関数に引数で親を指定する
- 生成した後にtransform.parentで親を変更する
の2つの方法があります。
特定の親の中で生成して、親の移動に合わせたオブジェクトにしたい場合におすすめです。
なお、親子関係は以下のページでもまとめていますので、参考にしてみてください。
最後までお読みいただきまして、ありがとうございました!
コメント