본문 바로가기
Unity/스크립터블오브젝트

Scriptable Object - 응용: 씬 직렬화의 특징과 활용 (14)

by PlaneK 2020. 6. 11.

씬 직렬화의 특징과 활용

 

특징

SO의 인스턴스를 Scene에 직렬화 한다는 뜻은 .asset파일로 직렬화 하지 않는다는 것이다.

씬에 배치된 MonoBehaviour개체에 의해 생성된 SO 인스턴스는 MonoBehaviour의 참조값으로써 .unity 파일에 MonoBehaviour 항목으로 직렬화된다.

이 방식의 한계는 .asset파일을 생성하지 않기 때문에 Prefab으로 직렬화할 수 없다. 이는 곧 디스크에 저장할 수 없다는 뜻이다. "정확히는 씬 파일도 디스크에 저장된다..."

따라서 해당 MonoBehaviour 개체를 Prefab으로 만들어서 다른 씬에 재사용할 수 없다.

(왜냐하면 .prefab 파일은 생성된 instance가 .asset파일이 아니라서 fileID로 저장하지 못하기 때문이다.)

 

활용

레벨 디자이너가 만든 Market 이라는 리소스가 주어졌다고 하자. 

Market은 고정된 디자인이다. 각 개체들은 다른 레벨에서 볼 수 없는 유일한 것들이다. 따라서 재사용하거나 Prefab으로써 런타임 때 동적 생성되지 않을 것이다. 돌, 나무 등과 같이 변동성이 없는 '정적 오브젝트'들인 것이다.

돌과 나무 같은 '정적 오브젝트'이기 때문에 Interactable 개체를 덮어 씌워주기만 하면 된다.

이 때 얻는 장점은 리소스가 다른 것으로 바뀌었을 때 변경할 필요가 없다. 서로 분리된 개체이기 떄문이다.

(그러나 Coin의 위치 변경은 interactable에도 반영해야 된다. 위치 변경에 대한 비용이 크다.)

치명적인 단점은 앞서 언급했던 것처럼 씬에 귀속되기 때문에 재사용할 수 없다.

씬에서 모든 작업이 이뤄지기 때문에 씬 파일의 누락이 곧 작업 유실로 이어질 수 있다. 따라서 씬을 변경할 권한을 갖는 담당자는 한명을 초과할 수 없다. 씬 변경에 대한 merge작업은 비용이 크고 까다롭기 때문이다.

 

댓글