[공부 내용]
ScriptableObject를 상속받는 클래스가 MonoBehaviour를 상속받는 클래스보다 좋은 점은 여러 가지가 있습니다. 이 두 클래스는 Unity에서 각각의 역할이 다르며, 사용 용도에 따라 그 장점이 두드러집니다.
- 메모리 효율성:
- ScriptableObject는 메모리 효율성이 뛰어납니다. MonoBehaviour는 씬 내의 각 게임 오브젝트에 부착되어야 하므로, 게임 오브젝트가 많아질수록 메모리 사용량이 늘어납니다. 반면, ScriptableObject는 에셋으로 저장되어 필요할 때 참조할 수 있으므로 메모리를 절약할 수 있습니다.
- 데이터 관리:
- ScriptableObject는 데이터 중심의 설계에 유리합니다. 예를 들어, 게임 내에서 사용되는 여러 설정값, 아이템 데이터, 스킬 데이터 등을 관리할 때 유용합니다. 이러한 데이터는 ScriptableObject를 사용해 에셋으로 저장하고, 이를 여러 게임 오브젝트에서 참조하도록 하면 관리가 용이합니다.
- 다중 사용:
- 하나의 ScriptableObject 인스턴스를 여러 게임 오브젝트가 공유할 수 있습니다. 반면에 MonoBehaviour는 각 게임 오브젝트마다 독립적으로 존재해야 합니다. 따라서 공통 데이터를 공유하는 경우 ScriptableObject를 사용하면 중복을 피할 수 있습니다.
- 씬 간 데이터 유지:
- ScriptableObject는 씬을 전환하더라도 데이터가 유지됩니다. 반면 MonoBehaviour는 게임 오브젝트에 종속적이므로 씬 전환 시 삭제됩니다. 따라서 글로벌한 데이터나 설정값을 유지하는 데 ScriptableObject가 적합합니다.
- 에디터 활용:
- ScriptableObject는 에디터 스크립팅에서 활용도가 높습니다. 커스텀 에디터를 작성하여 ScriptableObject를 쉽게 수정하고 관리할 수 있으며, 이를 통해 개발 편의성을 높일 수 있습니다.
예시
using UnityEngine;
[CreateAssetMenu(fileName = "NewItem", menuName = "Inventory/Item")]
public class Item : ScriptableObject
{
public string itemName;
public Sprite icon;
public int itemID;
}
위의 예제에서는 Item이라는 ScriptableObject를 정의하고, 이를 통해 아이템 데이터를 관리할 수 있습니다.
이와 반대로, MonoBehaviour는 주로 게임 오브젝트의 행동을 정의하고, 씬 내에서의 상호작용을 담당하는 데 적합합니다.
따라서, 데이터 저장과 관리, 메모리 효율성, 다중 참조, 씬 간 데이터 유지 등의 이유로 ScriptableObject가 특정 상황에서는 MonoBehaviour보다 더 나은 선택이 될 수 있습니다.
[참고자료]
https://wergia.tistory.com/189
[Unity3D] Scriptable Object - 스크립터블 오브젝트(Scriptable Object) 기본 사용법
Scriptable Object - 스크립터블 오브젝트(Scriptable Object) 기본 사용법 작성 기준 버전 :: 2019.1 ~ 2019.2 [이 포스트의 내용은 유튜브 영상으로도 시청하실 수 있습니다] 스크립터블 오브젝트(Scriptable Object
wergia.tistory.com
https://docs.unity3d.com/kr/2022.3/Manual/class-ScriptableObject.html
ScriptableObject - Unity 매뉴얼
ScriptableObject는 클래스 인스턴스와는 별도로 대량의 데이터를 저장하는 데 사용할 수 있는 데이터 컨테이너입니다. ScriptableObject의 주요 사용 사례 중 하나는 값의 사본이 생성되는 것을 방지하
docs.unity3d.com
이건 SerializeField 를 왜 사용하는지
유니티 SerializeField 란 무엇이고 왜 사용하는가?
게임의 상태를 저장하고 로드하기 위해 지루한 코드를 작성하는 데 지치셨나요? 그럼 유니티 SerializeField 를 사용하면 편리합니다! [SerializeField]를 사용하면 스크립트에서 비공개 필드를직렬화해
www.ibatstudio.com