계층 (Hierarchy)

1.계층?

계층은 부모와 자식, 형제처럼 게임 오브젝트를 단계를 나누어 표현하는것을 말합니다.
게임을 하다보면 마을객체 안에 내 캐릭터 객체가 포함되어 있을 수 있고,
갑옷이나 투구처럼 캐릭터 객체의 몸에 붙어 있는 아이템 객체가 있을 수 있습니다.
이처럼 객체가 부모요소가 되거나 자식요소가 필요할때 객체 기능을 사용합니다.

2.게임 오브젝트 생성

hier

[Sphere] 오브젝트 2개, [Cube] 오브젝트 1개를 생성하고 [Sphere] 오브젝트 중 한개의 이름을 [Child]로 지정합니다.
[Hierarchy] 창에서 [Child]를 드래그 하여 [Sphere] 위에 놓으면 계층구조로 표현됩니다.
이제는 [Sphere] 객체를 움직이면 [Child] 객체도 같이 움직입니다.

3.동적으로 계층 생성

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

public class SphereContoller : MonoBehaviour
{
//스피드와 계층 여부 선언
    private float speed = 10.0f;
    private bool got = false;

    // Start is called before the first frame update
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
        // 방향키 입력에 따라 움직이게 처리
        if (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.UpArrow))
        {
            transform.Translate(Vector3.forward * speed * Time.deltaTime);
        }
        if (Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.DownArrow))
        {
            transform.Translate(Vector3.back * speed * Time.deltaTime);
        }
        if (Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.LeftArrow))
        {
            transform.Translate(Vector3.left * speed * Time.deltaTime);
        }
        if (Input.GetKey(KeyCode.F) || Input.GetKey(KeyCode.RightArrow))
        {
            transform.Translate(Vector3.right * speed * Time.deltaTime);
        }
    // Space 입력시 Cube를 자식요소로 계층 생성
        if (Input.GetKey(KeyCode.Space))
        {
            GameObject child = GameObject.Find("Cube") as GameObject;
            if (!got)
            {
                child.transform.parent = this.transform;
                got = true;
            } else
            {
                child.transform.parent = null;
                got = false;
            }
        }
    }
}

게임을 실행후 [Space]를 누르면 [Cube] 객체의 하위요소로 계층화되어 따라다는것을 확인할 수 있습니다.