티스토리 뷰

반응형

 

ScriptableObject는 대량의 데이터를 저장할 수 있는 데이터 컨테이너로 데이터를 저장하고 있기 때문에 변경되지 않는 데이터를 갖는 프리팹의 경우 ScriptableObject를 사용하면 인스턴스화할 때마다 데이터를 중복하여 만들지 않기 때문에 메모리 사용을 줄일 수 있다.

 

MonoBehaviour와 같이 ScriptableObject는 Unity의 Object에서 파생되지만 MonoBehaviour와 달리 GameObject에 연결할 수 없고 에셋으로 저장된다.

 

편집기에서 사용할 때 데이터 저장은 아무 때나 가능하다. 다만 게임을 플레이하는 중에는 데이터를 저장할 수 없고 저장된 데이터를 사용하는 것만 할 수 있다.

 

편집기에서 에셋 형태로 ScriptableObject에 저장한 데이터는 세션 간에도 그대로 유지된다.

 

ScriptableObject는 에셋으로 관리되기 때문에 에셋 번들로 빌드하고 배포하는 방식으로 게임 데이터를 업데이트시키는 데 사용할 수 있다.

 

ScriptableObject를 생성하고 사용하는 방법은 아래와 같다.
클래스를 생성한 후 ScriptableObject 클래스를 상속받는다. CreateAssetMenu 속성을 사용하면 더욱 간편하게 커스텀 에셋을 생성할 수 있다.

using UnityEngine;

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


메뉴에서 Assets > Create > ScriptableObjects > Info를 클릭하여 ScriptableObject의 어셋을 생성할 수 있다.

 

ScriptableObject의 어셋을 생성하면 아래와 같은 아이콘이 생성된다.

 

어셋의 Inspecter는 다음과 같다.

Prefab Name에 원하는 데이터를 넣을 수 있다. 

 

만든 ScriptableObject의 어셋을 사용하려면 GameObject에 ScriptableObject를 참조하는 변수를 추가한 후 사용할 수 있다.

[SerializeField] Info _info;

void Start() {
    print(_info.prefabName);
}

그리고 Inspecter에서 아이콘을 드래그하여 GameObject에 연결한다.

 

참고 : https://docs.unity3d.com/kr/2022.3/Manual/class-ScriptableObject.html

 

반응형
댓글
반응형
최근에 올라온 글
Total
Today
Yesterday
글 보관함
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31