Unity 의 E-Book 을 보던 중 궁금해져서 찾아본 내용을 기록으로 남김
E-Book 내용에 다음과 같은 내용이 있음
If you need to make a ScriptableObject instance at runtime, you can call the
static CreateInstance method
Runtime 에 ScriptableObject 를 Instance 해서 사용하는게 그냥 new Class 를 사용 하는 것보다 더 좋은 점이 있을까?
유저의 의견)
직렬화가 필요한 경우 ScriptableObject 를 사용하고 그 외의 경우에는 new Class 를 사용하는 것을 추천
(여기서 말하는 직렬화는 Unity Editor 에서 Inspector 에 노출 시키기 위한 기능을 뜻하는 것으로 추측됨)
Serialization!
Unity uses it's own serialization methods to save and load objects. This serialization methods only supports classes that are derived from UnityEngine.Object.
You may say: "wait Unity can serialize every class with a [System.Serializable] attribute", well that's just partly true. If you have a MonoBehaviour class that has a public variable of your own class, Unity serializes the custom class as part of the MonoBehaviour. Unity doesn't take the true type into account.
If you have a variable of a base class in your MonoBehaviour but you hold an instance of a derived class, the class will be lost / converted into an instance of the base type when serialized / deserialized.
ScriptableObjects are true standalone objects. They are serialized on their own and the MonoBehaviour will just hold the reference to the instance, even when serialized.
If you don't need the serialization feature, use normal classes.
Keep in mind that if you want to use serialization Unity does serialize / deserialize your objects quite often.
Entering playmode: current scene is serialized, saved and immediately deserialized
Leaving playmode: The saved scene is deserialized.
Personally i don't like the ScriptableObject and Unitys serialization. Usually i use either my own way to serialize / save objects or use MonoBehaviours on empty GOs because it makes debugging easier ;).
Preset 데이터가 필요한 경우
일반 new Class 의 경우 Preset 데이터가 필요하면 하드 코딩을 하거나 다른 형태의 데이터를 가공해서 파싱해 사용해야 되지만, ScriptableObject 의 경우 하드 코딩 없이 간단하게 Preset 데이터를 추가할 수 있음
+ Data 공유가 쉬움
일반 new Class 의 경우 동일한 데이터를 여러 Class 에서 참조해 사용하게 하려면 Static 하게 만들거나 구조를 잘 잡아줘야함, 하지만 ScriptableObject 를 사용하면 Static Class 를 사용하지 않아도 동일한 데이터를 쉽게 공유 할 수 있음
https://www.gameprogrammingpatterns.com/flyweight.html
참고
https://discussions.unity.com/t/what-is-the-purpose-of-scriptableobject-versus-normal-class/32329
https://docs.unity3d.com/ScriptReference/Serializable.html
https://learn.microsoft.com/ko-kr/dotnet/api/system.serializableattribute?view=net-8.0
https://www.youtube.com/watch?v=6vmRwLYWNRo
'Works > Unity 3D' 카테고리의 다른 글
AltTester (0) | 2024.08.14 |
---|---|
Dependency Injection (0) | 2024.08.14 |
[Unity] TMP_InputField 의 inputValidator 사용법 (0) | 2023.09.07 |
Unity Sentis 설치 방법 (0) | 2023.08.18 |
Unity Muse (0) | 2023.08.16 |
댓글