ScriptableObject는 스크립트 인스턴스로와는 별도로 대량의 데이터를 저장하는데 사용할 수 있는 데이터 컨테이너입니다.
ScriptableObject는 값의 사본이 생성되는 것을 방지하여 프로젝트의 메모리 사용을 줄이는 것입니다.
이는 연결된 MonoBehaviour 스크립트에 변경되지 않는 데이터를 저장하는 프리팹에도 유용합니다.
ScriptableObject를 이용하면 데이터를 저장한 후 모든 프리팹의 레퍼런스를 통해 액세스할 수 있습니다.
즉, 메모리에 데이터 사본을 하나만 저장합니다.
ScriptableObject는 개임 오브젝트에 ScriptableObject를 연결할 수 없으며 대신 프로젝트의 에셋으로 저장해야 합니다.
에디터 사용 시, ScriptableObject에 데이터를 저장하는 작업은 편집할 때나 런타임에 가능합니다.
배포된 빌드에서는 ScriptableObject를 사용하여 데이터를 저장할 수 없으나, 개발 시 설정한 ScriptableObject 에셋의 저장된 데이터를 사용할 수 있습니다.
1. ScriptableObject 만들기
ScriptableObject은 다음과 같이 사용됩니다.
- 에디터 세션 동안 데이터 저장 및 보관
- 데이터를 프로젝트의 에셋으로 저장하여 런타임 시 사용
ScriptableObject를 사용하려면 애플리케이션의 Assets 폴더에 스크립트를 생성하고 ScriptableObject 클래스 상속하도록 합니다.
CreateAssetMenu 속성을 사용하면, 더욱 간편하게 클래스를 이용하여 커스텀 에셋을 생성할 수 있습니다.
using UnityEngine;
[CreateAssetMenu(fileName = "Entity", menuName = "Scriptable Objects/Spawn Entity", order = 1)]
public class SpawnEntity : ScriptableObject
{
public string name;
public Vector3[] positions;
}
CreateAssetMenu를 사용하게 되면, Asset > Create 메뉴 밑에 Scriptable Objects > Spawn Entity 메뉴가 생성됩니다.
Spawn Entity 메뉴를 클릭하게 되면, Asset 폴더 밑에 Entity.asset 파일이 생성됩니다.
Name은 Cube로 하고, Positions은 3개로 하고 위치값을 적당히 넣어면 됩니다.
2. ScriptableObject 사용하기
using UnityEngine;
public class Spawner : MonoBehaviour
{
public GameObject m_PrfbEntity;
public SpawnEntity m_SpawnEntity;
void Start()
{
SpawnEntities();
}
void SpawnEntities()
{
for (int i = 0; i < m_SpawnEntity.positions.Length; i++)
{
GameObject currentEntity
= Instantiate(m_PrfbEntity, m_SpawnEntity.positions[i], Quaternion.identity);
currentEntity.name = m_SpawnEntity.name + i;
}
}
'유니티 > 매뉴얼' 카테고리의 다른 글
[유니티 매뉴얼] 유니티 크래시(Crashes)시 저장하지 않은 씬(Scene) 복구 (1) | 2021.03.05 |
---|---|
[유니티 매뉴얼] 스크립트 템플릿 사용자 지정 (2) | 2021.03.05 |
[유니티 매뉴얼] Node.js 서버와 유니티 클라이언트간의 socket.io 웹소켓(Websocket) 통신. (2) | 2021.03.02 |
[유니티 매뉴얼] JSON 직렬화 (0) | 2021.02.24 |
[유니티 매뉴얼] 유니티 단축키 (1) | 2021.02.23 |