씬 직렬화의 특징과 활용
특징
SO의 인스턴스를 Scene에 직렬화 한다는 뜻은 .asset파일로 직렬화 하지 않는다는 것이다.
씬에 배치된 MonoBehaviour개체에 의해 생성된 SO 인스턴스는 MonoBehaviour의 참조값으로써 .unity 파일에 MonoBehaviour 항목으로 직렬화된다.
이 방식의 한계는 .asset파일을 생성하지 않기 때문에 Prefab으로 직렬화할 수 없다. 이는 곧 디스크에 저장할 수 없다는 뜻이다. "정확히는 씬 파일도 디스크에 저장된다..."
따라서 해당 MonoBehaviour 개체를 Prefab으로 만들어서 다른 씬에 재사용할 수 없다.
(왜냐하면 .prefab 파일은 생성된 instance가 .asset파일이 아니라서 fileID로 저장하지 못하기 때문이다.)
활용
레벨 디자이너가 만든 Market 이라는 리소스가 주어졌다고 하자.
Market은 고정된 디자인이다. 각 개체들은 다른 레벨에서 볼 수 없는 유일한 것들이다. 따라서 재사용하거나 Prefab으로써 런타임 때 동적 생성되지 않을 것이다. 돌, 나무 등과 같이 변동성이 없는 '정적 오브젝트'들인 것이다.
돌과 나무 같은 '정적 오브젝트'이기 때문에 Interactable 개체를 덮어 씌워주기만 하면 된다.
이 때 얻는 장점은 리소스가 다른 것으로 바뀌었을 때 변경할 필요가 없다. 서로 분리된 개체이기 떄문이다.
(그러나 Coin의 위치 변경은 interactable에도 반영해야 된다. 위치 변경에 대한 비용이 크다.)
치명적인 단점은 앞서 언급했던 것처럼 씬에 귀속되기 때문에 재사용할 수 없다.
씬에서 모든 작업이 이뤄지기 때문에 씬 파일의 누락이 곧 작업 유실로 이어질 수 있다. 따라서 씬을 변경할 권한을 갖는 담당자는 한명을 초과할 수 없다. 씬 변경에 대한 merge작업은 비용이 크고 까다롭기 때문이다.
'Unity > 스크립터블오브젝트' 카테고리의 다른 글
Scriptable Object - 응용: SaveData, Saver, SceneController (15) (1) | 2020.06.11 |
---|---|
Scriptable Object - 응용: ReactionCollection, 팝업과 드래그박스, 폴드아웃 (13) (0) | 2020.06.11 |
Scriptable Object - 응용: ConditionEditor, AllConditionsEditor, 프로젝트뷰 정리 (12) (0) | 2020.06.09 |
Scriptable Object - 응용: EditorWithSubEditors, 확장 메서드 (11) (2) | 2020.06.08 |
Scriptable Object - 응용: Interactable, 커스텀 에디터 (10) (0) | 2020.06.08 |
댓글