유니티/기능
유니티 스크립터블 오브젝트
MJ_119
2025. 1. 15. 15:46
사용 예시
[CreateAssetMenu(menuName = "Example/MyScriptableObject")]
public class MyScriptableObject : ScriptableObject
{
public int value;
private void Awake()
{
Debug.Log("Awake 호출!");
}
private void OnEnable()
{
Debug.Log("OnEnable 호출!");
}
private void OnDisable()
{
Debug.Log("OnDisable 호출!");
}
}
실행 시나리오
- ScriptableObject 생성 (에디터에서 생성):
- Awake가 호출됩니다.
- 에디터에서 활성화될 경우 OnEnable이 호출됩니다.
- 플레이 모드 진입:
- 에디터에서 이미 활성화된 상태라면 OnEnable만 호출됩니다.
- ScriptableObject 비활성화 (예: 리소스 언로드):
- OnDisable이 호출됩니다.
ScriptableObject의 생명 주기 활용
- Awake: 기본값 설정, 리소스 로드 등 객체의 초기화 작업.
- OnEnable: 활성화 시 초기화 작업이나 이벤트 등록.
- OnDisable: 비활성화 시 리소스 정리나 이벤트 해제.
- OnDestroy: 메모리에서 삭제될 때 마지막 정리 작업.
public class ScriptableObjectExample : MonoBehaviour
{
private void Start()
{
MyScriptableObject instance = ScriptableObject.CreateInstance<MyScriptableObject>();
instance.value = 42;
Debug.Log("ScriptableObject가 런타임에서 생성되었습니다!");
}
}
종합적인 호출 순서
새로 생성할 때:
- 생성자 호출 (C#의 기본 생성자)
- Awake() 호출
- OnEnable() 호출
애셋 로드 시:
- Awake() 호출
- OnEnable() 호출
애셋 비활성화 후 다시 활성화 시:
- OnEnable()만 호출