Scriptable Object
Unity에서 Script를 Component형식으로 사용하지 않고 Script자체를 Object로 사용하는 방식이다.
기존의 XML이나 JSON을 대신해서 데이터를 일정 고정값으로 보관하고 있다가 해당 data가 필요할 때
Scriptable Object를 new 하지 않고 data를 사용할 수 있다.
일종의 data만 가지고 있는 object를 사용하기 위해 있는 것이다.
해당객체는 생성시 new가 아닌 CreateInstance를 사용해야 한다.
public class BuildSetting : ScriptableOjbect { [SerializeField, Tooltip("빌드 결과물(apk 파일의 이름")] private string m_buildName = "GameName"; [SerializeField, Tooltip("버전정보")] private string m_version = "0.0.1a"; //build 정보를 가지고 있는 asset 객체를 만든다. private static BuildSetting s_asset; private static BuildSetting asset { get { if (null == s_asset) { LoadBuildSetting(); } return s_asset; } } //BuildName의 getter public static string BuildName { get { return asset.m_buildName; } } //Version의 getter public static string Version { get { return asset.m_version; } } } //이런식으로 고정값을 가진 Scriptable Object를 만든 뒤 //CreateInstance함수를 이용해 static 객체로 instance를 만든다. //이후 다른 빌드하는 클래스에서 사용할 때 이런식으로 사용한다. public static class Builder { string szBuildName = BuildSetting.BuildName; PlayerSettings.bundleVersion = BuildSetting.Version; }
Unity에서만 사용하는 unity resource(Texture 2D 등)같은것들을 다룰땐
WebServer 혹은 Local folder에 resource를 save하고 resource path information을 기반으로 load하는 로직을
만들어야 하므로 복잡해질 수 있는데 이를 간단히 Scriptable Object를 사용하므로 간단하게 처리할 수 있다.
[Serializable] public class CustomData : ScriptableObject { [SerializeField] float myData; [SerializeField] Texture2D myTexture; //이런식으로 unity에서 사용하는 resource data를 저장해놓은 뒤 필요할때마다 불러 사용할 수 있다. public float MyData { get { return myData; } } }
단점
Unity에서만 지원하는, unity system에 맞는 구조로 만들어진 기능이라 JSON이나 xml에 비해 범용성이 뒤떨어진다.
따라서 Server - Client 통신에서 작은 size의 빠른 data 통신이 필요할 때 부적합 하다.
그리고 Scriptable Object 는 unity에서만 이를 해독할 수 있어 server쪽에서는 이를 받아서 해독할 수 없다.
(즉 server에서 주고받는 data가 아닌 client에서만 사용할 data만 사용해야 한다.)
Data만 관리하는 object인데 불구하고 용량이 크다.
참고
http://archive.fo/5Mifm#selection-1741.22-1741.47
'TOOL > Unity' 카테고리의 다른 글
Draw call / Batch (0) | 2019.03.11 |
---|---|
Frame 고정값 셋팅 (0) | 2019.03.11 |
Coroutine / IEnumerator / IEnumerable (0) | 2019.03.06 |
Unity CG / Boehm-Demer-Weiser / 점진적 GC (0) | 2019.03.05 |
Unity Heap Memory 구조 (0) | 2019.03.05 |