본문 바로가기
유니티

[Unity] 스크립터블 오브젝트(Scriptable Object)

728x90
반응형

스크립터블 오브젝트(Scriptable Object) 란?

스크립터블 오브젝트는 유니티에서 제공해주는 데이터 컨테이너입니다. 스크립터블 오브젝트를 다른 컴포넌트에 프리팹 형식으로 넘겨주어 사용하게되는데 이때 프리팹을 인스턴스화 하여도 값복사가 이루어지지 않고 참조형식으로만 생성이 되기 때문에 주로 변경되지 않는 참조용 데이터 즉, 플레이어나 몬스터들의 기본 스탯을 저장하는데 유용합니다. 다만, 모든 인스턴스가 하나의 데이터를 참조하기 때문에 각 몬스터들의 현재체력, 위치 등 객체별로 값이 달라야하는 데이터 저장에는 적합하지 않습니다.

 

 

Scriptable Object 사용 예시

using UnityEngine;

[CreateAssetMenu(fileName = "Data", menuName = "ScriptableObjects/SpawnManagerScriptableObject", order = 1)]
public class SpawnManagerScriptableObject : ScriptableObject
{
    public string prefabName;

    public int numberOfPrefabsToCreate;
    public Vector3[] spawnPoints;
}

Scriptable Object는 다른 오브젝트들과 달리 Asset파일 형태로 저장됩니다. CreateAssetMenu를 통해 에셋 파일의 이름과 경로를 설정해줄 수 있습니다.

 

 

스크립터블 오브젝트의 특징을 살려 Inventory구현등에도 사용할 수 있습니다. Inventory는 단 하나임이 보장 되어야 하기 때문에 Singleton으로 자주 구현되곤 하지만 스크립터블 오브젝트도 중복 생성을 방지해주기 때문에 대체 될수 있습니다. Inventory Class에 Scriptable Object를 상속시키고 인벤토리 참조를 원하는 곳마다 해당 오브젝트의 프리팹을 건내주어 인스턴스화 하여 사용할 수 있습니다. 또한, MonoBehaviour를 상속 받지 않기 때문에 Transform과 Update함수가 없지만 별도의 초기화 없이도 계속 활성화 되어있는것이 장점입니다.

반응형