Tsuの雑記¯\_(ツ)_/¯

主に製作メモ・備忘録として使用。製作したアプリのリンクもあります。

【Unity】動的に生成した Object を親とする方法【C#】

オブジェクトの親子関係は,スクリプト上で動的に指定できます。

本稿では「オブジェクトが既に存在する場合」や「新たに生成する場合」など,複数のパターンについて解説いたします。

(Unity 2018.3.0f2)

今回,使用するメソッドはこちら。

docs.unity3d.com

表題のような方法を知りたい場合は,下記の目次から飛ぶ事も出来ます。

親も子も既に存在する場合

using UnityEngine;

public class NewBehaviourScript : MonoBehaviour
{
    [SerializeField, Tooltip("親")]
    Transform parent = null;
    [SerializeField, Tooltip("子")]
    Transform child = null;

    void Start()
    {
        // parent を child の親に設定
        child.SetParent(parent);
    }
}

上記のようなスクリプトファイルを,適当な GameObject にアタッチします。

UnityEditor 上でParentオブジェクトとChildオブジェクトを,親子関係にせず生成しましょう。

UnityEditor 上で作られたオブジェクト同士が親子関係になっていない画像
まだ親子関係はない

Inspector ウインドウでParentChildもアタッチして,Play します。

UnityEditor 上で作られたオブジェクト同士が動的に親子になっている画像
動的に親子関係が出来た

親は存在するが子は動的に生成する場合

using UnityEngine;

public class NewBehaviourScript : MonoBehaviour
{
    [SerializeField, Tooltip("親")]
    Transform parent = null;

    void Start()
    {
        // child の生成
        var child = new GameObject("Child").transform;
        // parent を child の親に設定
        child.SetParent(parent);
    }
}

上記のようなスクリプトファイルを,適当な GameObject にアタッチします。

UnityEditor 上で,Parentオブジェクトを生成しましょう。

UnityEditor 上で作られた Parent オブジェクトのみが存在している画像
子は動的に生成する

Inspector ウインドウでParentをアタッチして,Play します。

UnityEditor 上で作られたオブジェクトとスクリプトで作られたオブジェクトが親子になっている画像
動的に生成したオブジェクトが子に

子は存在するが親は動的に生成する場合

using UnityEngine;

public class NewBehaviourScript : MonoBehaviour
{
    [SerializeField, Tooltip("子")]
    Transform child = null;

    void Start()
    {
        // parent の生成
        var parent = new GameObject("Parent").transform;
        // parent を child の親に設定
        child.SetParent(parent);
    }
}

上記のようなスクリプトファイルを,適当な GameObject にアタッチします。

UnityEditor 上で,Childオブジェクトを生成しましょう。

UnityEditor 上で作られた Child オブジェクトのみが存在している画像
親は動的に生成する

Inspector ウインドウでChildをアタッチして,Play します。

スクリプトで作られたオブジェクトと UnityEditor 上で作られたオブジェクトが親子になっている画像
動的に生成したオブジェクトが親に

子も親も動的に生成する場合

using UnityEngine;

public class NewBehaviourScript : MonoBehaviour
{
    void Start()
    {
        // parent の生成
        var parent = new GameObject("Parent").transform;
        // child の生成
        var child = new GameObject("Child").transform;
        // parent を child の親に設定
        child.SetParent(parent);
    }
}

上記のようなスクリプトファイルを,適当な GameObject にアタッチします。

UnityEditor 上ではオブジェクトを生成していない画像
どちらのオブジェクトも存在しない

そのまま Play します。

スクリプト上で作られたオブジェクト同士が動的に親子になっている画像
動的に生成も親子関係も出来た

以上,親子関係を動的に指定する方法でした。