Unity: スクリプトだけで親子関係のあるオブジェクトを作成する


 最近趣味でUnityを扱っていて、その中でスクリプト上でオブジェクトを作成し親子関係を設定することがあったのでまとめておきます。

親子関係のあるオブジェクトを作成する

 まず、スクリプトを作成します。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class sample : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {

    }
}

1. 3Dオブジェクトの作成

 3Dのオブジェクトを作成する際には、GameObject.CreatePrimiticve関数を使用するようです。その引数でオブジェクトのタイプを選択することでオブジェクトを出力します。


void Start()
{
    // プレーン型オブジェクト
    GameObject plane  = GameObject.CreatePrimitive(PrimitiveType.Plane);
    // キューブ型オブジェクト
    GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
    // 球型オブジェクト
    GameObject sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);
    // カプセル型オブジェクト
    GameObject capsule = GameObject.CreatePrimitive(PrimitiveType.Capsule);
    // 円柱型オブジェクト
    GameObject cylinder = GameObject.CreatePrimitive(PrimitiveType.Cylinder);
}

2. オブジェクトの親子関係の追加

 親子関係はオブジェクトのtransform間に設定される関係なようで、子オブジェクトのtransformに対してparent要素に親オブジェクトのtransformを代入するだけで良いようです。

// キューブ型オブジェクトの親要素に球型オブジェクトを追加する
cube.transform.parent = sphere.transform;
// カプセル型オブジェクトの親要素に球型オブジェクトを追加する
capsule.transform.parent = sphere.transform;

親子関係の解消について

子オブジェクトから

 子オブジェクトからの親子関係の解消は子オブジェクトに登録されていた親オブジェクトを上書きすることでできます。

cube.transform.parent = null;

親オブジェクトから

 親オブジェクトからの親子関係の解消は複数の子オブジェクト全てとの親子関係を削除することになります。

sphere.transform.DetachChildren();