코스모스 공작소

[Unity] ScriptableObject 이용해서 데이터 만들고 사용해보기 본문

프로그래밍/Unity

[Unity] ScriptableObject 이용해서 데이터 만들고 사용해보기

cosmos_studio_ 2023. 9. 29. 18:59
반응형

안녕하세요 오늘은 ScriptalbeObject를 이용해서 데이터를 만들어보겠습니다.

Scriptable Object란?

Unity에서 제공하는 데이터 컨테이너입니다. 대량의 데이터를 저장하고 불필요한 데이터의 사본을 줄이는데 좋습니다. 또한 변경되지 않는 데이터를 저장하는 프리팹에 사용하기 적합하고 인스턴스화 된 프리팹 당 자체 사본이 생성되어 중복되는 데이터 저장을 회피합니다.

직접 하면서 이해해 보도록하겠습니다.

ScriptableObject 사용법

데이터에는 Cube, Spere, Capsule 를 넣어 놓고 ScriptableObject에서 저장된 데이터를 불러와서 생성시키는 예제를 만들어 보겠습니다.

  • 관련 스크립트
    • ScriptableObject 스크립트
using UnityEngine;

public enum OBJ_TYPE
{
    CUBE,
    SPHERE,
    CAPSULE
}

[CreateAssetMenu(fileName = "ObjScriptableObject", menuName = "ScriptableObject_Test/ObjScriptableObject", order = 0)]
public class ObjScriptableObject : ScriptableObject 
{
    public OBJ_TYPE type;
    public int MakeCount;
}

          - 오브젝트를 생성할 manager스크립트

using UnityEngine;

public class MakeObject : MonoBehaviour
{
    public ObjScriptableObject TestData;
    public GameObject Cube;
    public GameObject Sphere;
    public GameObject Capsule;

    // Start is called before the first frame update
    void Start()
    {
        Cube.SetActive(false);
        Sphere.SetActive(false);
        Capsule.SetActive(false);

        GameObject resultObj = null;

        if (TestData.type == OBJ_TYPE.CUBE)
        {
            Cube.SetActive(true);
            resultObj = Cube;
        }
        else if (TestData.type == OBJ_TYPE.CAPSULE)
        {
            Capsule.SetActive(true);
            resultObj = Capsule;

        }
        else if (TestData.type == OBJ_TYPE.SPHERE)
        {
            Sphere.SetActive(true);
            resultObj = Sphere;
        }


        for(int i=0;i<TestData.MakeCount;i++)
        {
            GameObject temp = Instantiate(resultObj);
            temp.transform.position = new Vector3(2f * i, 0, 0);

        }
    }

}

MakeObject를 씬에 오브젝트를 만들어 넣어주고 3개의 오브젝트를 인스펙터에 배치해줍니다. 그리고 ObjScriptableObject에 밑에서 만들 ScriptableObject를 인스펙터 상에 배치해줍니다.

위와 같은 화면이 되어야합니다.

그리고 ScriptableObject를 만들 위치에 오른쪽 클릭으로 생성합니다. 저 메뉴를 만드는 방법은 [CreateAssetMenu(fileName = "ObjScriptableObject", menuName = "ScriptableObject_Test/ObjScriptableObject", order = 0)]

ScriptableObject 스트립트 상위에 적어주면서 적용이 가능합니다. CreateAssetMenu는 asset메뉴를 추가해줍니다. 원하는 폼의 C#이 있거나 파일이 있으면 요긴하게 사용할 수 있습니다.

생성해주시고 오른쪽 상단에 우리가 만든 오브젝트들의 타입 (Cube, Spere, Capsule) 을 선택할 수 있고 몇개를 만들지에 대해 기록합니다.

 

이제 실행을 시켜보면 설정한 CAPSULE 4개가 생성된것을 볼 수 있습니다.

 

마무리

 

 지금까지 ScriptableObject를 이용하는 방법에 대해 매우 간략하게 알아보았습니다. 아주 작은 데이터를 가지고 테스트하고 깊은 성능을 테스트하지는 못했지만 충분히 동작을 처음 이해하기엔 충분하다고 생각이 듭니다. 작고 간단한 데이터들을 유니티 내부에서 관리할 수 있는 것에 큰 장점이 있지만 큰 규모의 데이터를 관리하는데에 있어서는 조금 힘들거 같다는 생각이 들었습니다. XML이나 json이 더 편리할 수도 있을거 같습니다. 하지만 테스트에 용이할거 같으니 빠른 결과물을 원할때 사용하기 좋을거 같습니다. 감사합니다!

 

반응형
Comments