Unity 전체 링크 Scriptable.cs는 여러 변수가 있다. 지금은 4개지만, 앞으로 점점 늘어날 것이고 데이터를 일일이 입력해줘야 한다.
이럴 경우 ScriptableObject를 사용하여 Data를 분리할 수 있다. 먼저 분리할 Data의 이름을 MyData라고 하고 Scriptable.cs에 추가해두자. a ~ d 변수를 모두 mydata가 대신하게 된다.
스크립터블 오브젝트는 MonoBehaviour 대신 ScriptableObject를 상속한다. 그리고 MyData를 기반으로 mydata1, mydata2, mydata3 등을 만들어서 저장해야 한다. CreateAssetMenu 속성으로 오브젝트를 생성하도록 추가한다.
그러면 Create 메뉴에 menuName="MyScriptable" 가 보인다. Assets에도 확인할 수 있다. 클릭하면 아래와 같이 Scriptable Object가 생성된다. 그리고 데이터를 Inspector에서 수정가능하다. 데이터를 xml, json 등으로 분리할 수도 있지만 매번 알맞은 에디터 창을 켜서 수정하기 때문에 불편하다. 이런 경우는 스크립터블 오브젝트가 유리할 수 있다. MyData에 원하는 값을 수정한 후, Scriptable의 Mydata에 연결하면 된다. Scriptable.cs 내부에서는 아래와 같이 접근할 수 있다. 이제 여러 개의 오브젝트에서 a, b, c, d를 모두 다르게 사용한다면 MyData를 여러 개 만들어서 관리하면 된다. 또는 하나의 스크립트에서 MyData[]로 여러 개의 데이터를 관리할 수도 있다. ScriptableObject란?ScriptableObject는 클래스 인스턴스와는 별도로 대량의 데이터를 저장하는 데 사용할 수 있는 데이터 컨테이너입니다. ScriptableObject의 주요 사용 사례는 값의 사본이 생성되는 것을 방지하여 프로젝트의 메모리 사용을 줄이는 것입니다. 이는 첨부된 MonoBehaviour 스크립트에 변경되지 않는 데이터를 저장하는 프리팹이 있는 프로젝트의 경우 유용합니다. 이러한 프리팹을 인스턴스화할 때마다 프리팹에 이 데이터의 자체 사본이 생성되는데, 이와 같은 방법을 사용하여 중복 데이터를 저장하는 대신 ScriptableObject를 이용하여 데이터를 저장한 다음 모든 프리팹의 레퍼런스를 통해 액세스할 수 있습니다. 즉, 메모리에 데이터 사본을 하나만 저장합니다. MonoBehaviour와 마찬가지로 ScriptableObject는 기본 Unity 오브젝트에서 파생되나, MonoBehaviour와는 달리 게임 오브젝트에 ScriptableObject를 연결할 수 없으며 대신 프로젝트의 에셋으로 저장해야 합니다. 에디터 사용 시, ScriptableObject에 데이터를 저장하는 작업은 편집할 때나 런타임에 가능합니다. 이는 ScriptableObject가 에디터 네임스페이스와 에디터 스크립팅을 사용하기 때문입니다. 배포된 빌드에서는 ScriptableObject를 사용하여 데이터를 저장할 수 없으나, 개발 시 설정한 ScriptableObject 에셋의 저장된 데이터를 사용할 수 있습니다. 에디터 툴에서 에셋 형태로 ScriptableObject에 저장한 데이터는 디스크에 작성되므로 세션 간에도 그대로 유지됩니다. ScriptableObject 사용하기ScriptableObject의 주요 사용 사례는 다음과 같습니다.
ScriptableObject를 사용하려면 Assets 폴더에 스크립트를 생성하고
Assets 폴더의 상기 스크립트를 이용하여 Assets > Create > ScriptableObjects > SpawnManagerScriptableObject 로 이동하여 ScriptableObject의 인스턴스를 생성할 수 있습니다. 새 ScriptableObject 인스턴스에 알아볼 수 있는 이름을 지정하고 값을 변경합니다. 이러한 값을 사용하려면 ScriptableObject를 참조하는 새로운 스크립트를 만들어야 합니다(이 경우
위의 스크립트를 씬의 게임 오브젝트에 연결합니다. 그런 다음 인스펙터에서 Spawn Manager
Values 필드를 새로 설정한 팁: 인스펙터에서 ScriptableObject 레퍼런스로 작업할 때 레퍼런스 필드를 더블 클릭해서 ScriptableObject의 인스펙터를 열 수 있습니다. 또한 인스펙터가 나타내는 데이터의 관리에 도움이 되도록 모양을 정의해 커스텀 에디터를 만들 수도 있습니다.
|