스트리밍 에셋
Advanced Editor Topics

스크립팅 가능한 오브젝트(ScriptableObject)

ScriptableObject는 스크립트 인스턴스로부터 독립한 대량의 공유 데이터를 저장할 수 있는 클래스입니다. SerializableObject와 혼동하기 쉽지만, 이쪽은 에디터 클래스이며, 목적도 다릅니다. 예를 들어 integer가 1만 행 있는 배열의 스크립트 프리팹을 작성했다고 가정합니다. 배열은 4MB의 메모리를 점유하고, 프리팹이 오너입니다. 프리팹을 인스턴스화 할 때마다 그 배열이 복제됩니다. 게임 오브젝트를 10개 만들면 10인스턴스 합계에서 40MB가 됩니다.

모든 원시 타입, 문자열, 배열, 리스트, Vector3 같은 Unity만의 사용자 정의 클래스를 Unity는 serialize 속성에 의해 선언된 오브젝트에 속하는 복제로 직렬화합니다. 예를 들어 SerializableObject를 만들고 integer가 1만 개만 저장한 경우, 배열은 그 인스턴스에 저장됩니다. 인스턴스는 개별 데이터의 오너로 간주됩니다. ScriptableObject 필드와 임의의 UnityEngine.Object 필드인 MonoBehaviour, Mesh, GameObject 등은 값이 아니라 참조가 저장됩니다. ScriptableObject는 배열을 저장합니다. ScriptableObject에 대한 참조가 있는 프리팹 인스턴스가 10개 있고, 4MB의 데이터를 보유하는 경우, 합계는 어디까지나 4MB가 되어 앞 처럼 40MB는 되지 않습니다.

값의 복제를 피함으로써 메모리 소비를 줄이려는 경우 ScriptableObject을 사용하지만, 플러그 가능한 데이터 집합을 정의하는 데에도 사용할 수 있습니다. 예를 들면 RPG의 NPC 캐릭터의 샵(Shop)입니다. 사용자 지정 ShopContents ScriptableObject에서 여러 에셋 만들고 각각 구매 가능한 항목을 정의할 수 있습니다. 게임에 3개의 영역이 있다고 가정하면 각각의 영역에서 다른 레벨의 아이템을 제공할 수 있습니다. 샵의 스크립트에서 ShopContents 오브젝트를 참조하여 이용 가능한 항목을 정의할 수 있습니다. 샘플은 스크립팅 레퍼런스를 참조하십시오.

Once you have defined a ScriptableObject-derived class, you can use the CreateAssetMenu attribute to make it easy to create custom assets using your class.

팁 : 인스펙터상에서 ScriptableObject에서 참조를 다룰 때, 참조 필드를 더블 클릭하여 ScriptableObject를 엽니다. 또한 사용자 지정 에디터를 작성하여 그 형태가 나타내는 데이터가 관리하기 쉽도록 인스펙터의 모양을 정의할 수 있습니다.

스트리밍 에셋
Advanced Editor Topics