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
반응형
'Unity 학습' 카테고리의 다른 글
유니티3D 문 열고/닫기 상호작용 만들기 (0) | 2025.06.19 |
---|---|
Unity 오브젝트 풀링(Object Pooling)과 프리팹(Prefab)의 개념정리 (0) | 2025.06.19 |
유니티 Starter Assets 무료 에셋을 이용한 3인칭 카메라 추적 만들기 (0) | 2025.06.10 |
유니티 무료 에셋을 활용한 3D 캐릭터와 움직임 구현 (2) | 2025.06.09 |
간단한 3D 캐릭터 이동과 점프 (1) | 2025.06.08 |