Unity 학습

Unity ScriptableObject의 개념과 MonoBehaviour와의 차이점

리저브콜드브루 2025. 6. 16. 22:47
728x90
반응형

ScriptableObject란?

Unity에서 제공하는 비-컴포넌트 기반의 경량 클래스로, 게임 오브젝트에 부착하지 않고도 데이터를 저장하고 공유할 수 있는 자산 형태의 객체

 

 

특징

항목 내용
컴포넌트가 아님 GameObject에 부착되지 않는다
생명주기 없음 Start(), Update() 같은 생명주기 메서드가 없다
메모리 효율 중복 인스턴스 없이 다수의 오브젝트가 공유 가능하다
에디터 연동 ScriptableObject를 에디터에서 .asset 형태로 저장 가능하다
복잡도 낮음 씬에 존재하지 않아도 되므로 관리가 단순하다

 

 

주요 사용 사례

분야 예시
게임 데이터 무기/캐릭터/스킬/아이템 정보 정의
설정값 관리 난이도, 튜토리얼 진행 정보, 전역 설정
공유 데이터 런타임에 여러 오브젝트가 참조하는 공통 상태
상태 정의 FSM 상태 정의, 이벤트 트리거 데이터 등

 

 

기본 사용 예시

1. ScriptableObject 정의

[CreateAssetMenu(menuName = "MyGame/CharacterData")]
public class CharacterData : ScriptableObject
{
	public string characterName;
    public int hp;
    public float speed;
}

 

2. 에디터에서 인스턴스 생성

프로젝트 패널에서 Assets > Create > MyGame > CharacterData

 

3. 스크립트에서 참조

public class Character : MonoBehaviour
{
	public CharacterData data;
    
    void Start()
    {
    	Debug.Log(data.characterName);
    }
}

 

 

ScriptableObject vs MonoBehaviour

항목 ScriptableObject MonoBehaviour
GameObject 부착 필요 없음 필요함
생명주기 함수 없음 있음
에디터 자산화 .asset 형태 저장 불가
복수 참조 공유 가능 GameObject마다 개별 인스턴스
대표 용도 데이터 저장/전달 동작 및 로직 실행

 

 

주의할 점

ScriptableObject는 참조를 공유하므로, 런타임 중 직접 값을 변경하면 다른 객체에도 영향을 미칠 수 있다

728x90
반응형