상세 컨텐츠

본문 제목

유니티 스크립터블 오브젝트

유니티/기능

by 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 호출!");
    }
}

실행 시나리오

  1. ScriptableObject 생성 (에디터에서 생성):
    • Awake가 호출됩니다.
    • 에디터에서 활성화될 경우 OnEnable이 호출됩니다.
  2. 플레이 모드 진입:
    • 에디터에서 이미 활성화된 상태라면 OnEnable만 호출됩니다.
  3. 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가 런타임에서 생성되었습니다!");
    }
}

 

 

종합적인 호출 순서

새로 생성할 때:

  1. 생성자 호출 (C#의 기본 생성자)
  2. Awake() 호출
  3. OnEnable() 호출

애셋 로드 시:

  1. Awake() 호출
  2. OnEnable() 호출

애셋 비활성화 후 다시 활성화 시:

  1. OnEnable()만 호출

관련글 더보기