Metaverse/Unity

Scriptable Object

onenewkong 2023. 7. 24. 00:42

Scriptable Object

: 클래스 인스턴스와는 별도로 대량의 데이터를 저장하는 데 사용할 수 있는 데이터 컨테이너

 

 

유니티 오브젝트를 상속받은 클래스로 Unity Serialize 시스템을 가지고 있음

  • serialize: 클래스나 오브젝트를 스트링이나 일차원 배열 형태로 변환하는
  • 실제 파일을 열어 보면 저장된 텍스트 내용 확인 가능
  • 데이터 컨테이너로 데이터 공유에 사용할 있고, 이를 통해 메모리 사용량 줄일 있음
  • Scriptable Object 데이터를 참조 형태로 오브젝트에서 가져올 있게 함으로써 메모리 할당을 최소화하고 고유한 값을 가질 있게

 

주요 사용 사례)

  • 사본이 생성되는 것을 방지하여 프로젝트의 메모리 사용을 줄임

연결된 MonoBehaviour 스크립트에 변경되지 않는 데이터를 저장하는 프리팹이 있을 때 주로 사용

 

 

  • 프리팹을 인스턴스화할 때마다 해당 데이터의 자체 사본이 생성됨
  • 이러한 방법을 사용하여 중복 데이터를 저장하는 대신 ScriptableObject를 이용하여 데이터를 저장한 후 모든 프리팹의 레퍼런스를 통해 액세스할 수 있음
  • 즉, 메모리에 데이터 사본을 하나만 저장함

 

MonoBehaviour와 마찬가지로 ScriptableObject는 기본 Unity 오브젝트에서 파생되나, MonoBehaviour와는 달리 게임오브젝트에 ScriptableObject를 연결할 수 없음

-> 프로젝트의 에셋으로 저장해야 함

 

  • 에디터 사용 시, ScriptableObject에 데이터를 저장하는 작업은 편집할 때나 런타임에 가능
  • 이는 ScriptableObject가 에디터 네임스페이스와 에디터 스크립팅을 사용하기 때문
  • 배포된 빌드에서는 ScriptableObject를 사용하여 데이터를 저장할 수 없으나, 개발 시 설정한 ScriptableObject 에셋의 저장된 데이터를 사용할 수 있음
  • 에디터 툴에서 에셋 형태로 ScriptableObject에 저장한 데이터는 디스크에 작성되므로 세션 간에도 그대로 유지됨

'Metaverse > Unity' 카테고리의 다른 글

Event  (0) 2023.08.31
RPG Project 오류 일지 - Respawn  (0) 2023.08.15
디자인 패턴 요약  (0) 2023.07.24
체감형 AR 디자인 - 최적화  (0) 2023.05.17
Object Pool  (0) 2023.05.06