Unity의 씬 파일이나 프리팹 파일은 YAML 형식으로 저장되지만, 일반적인 YAML 파일처럼 계층 구조로 표현되지 않습니다. Unity의 YAML 파일은 엔티티-컴포넌트 시스템을 기반으로, 각 오브젝트와 컴포넌트가 독립적으로 나열되는 방식으로 구조화되어 있습니다. 따라서, 계층 구조라기보다는 ID 기반의 참조 구조로 구성되어 있습니다.
Unity 씬 YAML 파일의 구조
Unity의 씬 파일은 특정 오브젝트와 해당 오브젝트에 부착된 컴포넌트들이 ID를 통해 서로 연결되는 방식으로 작성됩니다. 각 오브젝트와 컴포넌트는 고유한 ID를 가지며, 다른 오브젝트나 컴포넌트를 참조할 때 이 ID를 사용합니다. 이러한 구조로 인해, Unity의 YAML 파일은 비선형적이며, 계층 구조를 단순히 들여쓰기로 파악하기 어렵습니다.
구조 이해 및 예시
다음은 Unity 씬 파일에서 흔히 볼 수 있는 YAML 구조의 예시입니다:
--- !u!1 &100000
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: "Player"
m_TagString: "Player"
m_Layer: 0
m_Components:
- component: {fileID: 400000}
- component: {fileID: 400001}
- component: {fileID: 400002}
--- !u!4 &400000
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_GameObject: {fileID: 100000}
m_LocalPosition: {x: 0, y: 1, z: 0}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalScale: {x: 1, y: 1, z: 1}
주요 포인트
-
고유 ID 시스템:
- 각 오브젝트와 컴포넌트는 고유한 ID(
&100000
, &400000
등)를 가집니다. 오브젝트와 컴포넌트는 이 ID를 통해 서로 연결되며, 컴포넌트가 어느 오브젝트에 부착되어 있는지 알 수 있습니다.
-
계층 구조 대신 참조 시스템:
- 오브젝트 간의 부모-자식 관계나 계층 구조는
Transform
컴포넌트 내의 참조를 통해 정의됩니다. 예를 들어, 부모 오브젝트의 Transform
컴포넌트가 자식 오브젝트의 Transform
을 참조하는 식으로 계층 관계를 나타냅니다.
- 그러나 YAML 파일에서 이를 직접적으로 들여쓰기로 표현하지 않고, 참조된 ID를 따라가며 구조를 파악해야 합니다.
-
컴포넌트 나열:
GameObject
에는 여러 컴포넌트가 부착될 수 있으며, 각 컴포넌트는 YAML 파일 내에서 fileID
를 통해 나열됩니다. 예를 들어, Transform
이나 MeshRenderer
와 같은 컴포넌트가 별도로 정의되어 있으며, GameObject
는 이러한 컴포넌트를 참조합니다.
Unity 에디터에서 계층 구조 확인하는 방법
YAML 파일에서 직접 계층 구조를 파악하는 것이 어렵기 때문에, Unity 에디터를 사용하여 다음 방법으로 계층 구조를 시각적으로 확인할 수 있습니다:
- Hierarchy 창: Unity 에디터의 Hierarchy 창을 통해 씬 내의 오브젝트 계층 구조를 시각적으로 확인할 수 있습니다. 오브젝트가 어떤 부모와 자식 관계를 가지는지, 컴포넌트가 어떻게 부착되어 있는지를 파악할 수 있습니다.
- Inspector 창: 특정 오브젝트를 선택하면, 해당 오브젝트에 부착된 모든 컴포넌트와 그 속성을 Inspector 창에서 확인할 수 있습니다. 이를 통해 YAML 파일의 특정 항목이 Unity 에디터 내에서 어떻게 매핑되는지 파악할 수 있습니다.
요약
Unity 씬 파일의 YAML은 계층 구조가 아닌 ID 기반의 참조 시스템을 사용합니다. Unity 에디터의 Hierarchy 창과 Inspector 창을 통해 오브젝트 계층과 컴포넌트의 연결 관계를 시각적으로 확인하는 것이 더 효과적입니다.