본문 바로가기

유니티/매뉴얼

[유니티 매뉴얼] 스크립팅 가능한 오브젝트(ScriptableObject)

728x90
반응형

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;
        }
    }

 

 

 

 

 

 

 

 

728x90
반응형