Unity에서 ScriptableObject 생성

Unity의 ScriptableObject는 재사용 가능한 데이터 기반 객체를 생성할 수 있는 특별한 유형의 클래스입니다. 일반적으로 게임 데이터, 구성 및 설정을 저장하고 관리하는 데 사용되지만 게임 설정 관리, 데이터 기반 시스템 생성, 캐릭터 능력 정의, 대화 저장 등 다양한 목적으로도 사용할 수 있습니다. 또는 퀘스트 정보 등 Unity 프로젝트의 데이터를 구성하고 관리하는 유연하고 효율적인 방법을 제공합니다.

ScriptableObjects의 주요 장점은 여러 스크립트 인스턴스에서 쉽게 공유하고 재사용할 수 있는 데이터 컨테이너를 만드는 방법을 제공한다는 것입니다. 특정 데이터 유형의 인스턴스를 생성하기 위한 "blueprints"로 생각할 수 있습니다. ScriptableObject의 여러 인스턴스를 생성하고 해당 데이터를 독립적으로 수정할 수 있습니다.

스크립터블 객체 생성

ScriptableObject는 Unity 편집기에서 생성하고 프로젝트에 자산으로 저장할 수 있습니다. MonoBehaviour 스크립트와 달리 ScriptableObject는 장면의 GameObject에 연결되지 않지만 다른 스크립트에서 참조하고 사용할 수 있습니다.

ScriptableObject를 만들려면 아래 단계를 따르세요.

  • Unity 편집기에서 프로젝트 창을 마우스 오른쪽 버튼으로 클릭하고 "Create -> C# ScriptableObject"로 이동합니다.
  • 의미 있는 이름을 지정하고 기본 코드 편집기에서 스크립트를 엽니다.

ScriptableObject 클래스 정의:

  • 스크립트에서 ScriptableObject 클래스를 상속합니다.
  • ScriptableObject에 저장할 데이터를 나타내는 공개 필드 또는 속성을 정의합니다.
using UnityEngine;

[CreateAssetMenu(fileName = "NewData", menuName = "MyGame/ScriptableObject")]
public class MyScriptableObject : ScriptableObject
{
    public string dataName;
    public int dataValue;
}

위의 예에서는 'dataName (string)' 및 'dataValue (int)'라는 두 개의 공개 필드를 사용하여 ScriptableObject 클래스를 정의합니다.

Inspector에서 ScriptableObject 사용자 정의:

  • '[SerializeField]'와 같은 속성을 사용하면 해당 ScriptableObject를 사용할 스크립트에서 해당 필드에 액세스할 수 없도록 유지하면서 수정을 위해 특정 필드를 Unity 검사기에 노출할 수 있습니다.
using UnityEngine;

[CreateAssetMenu(fileName = "NewData", menuName = "MyGame/ScriptableObject")]
public class MyScriptableObject : ScriptableObject
{
    [SerializeField]
    private string dataName;

    [SerializeField]
    private int dataValue;
}

ScriptableObject의 인스턴스 생성:

  • Unity 편집기에서 프로젝트 창을 마우스 오른쪽 버튼으로 클릭하고 "Create"을 선택하여 ScriptableObject의 인스턴스를 만듭니다.
  • Inspector에서 생성된 인스턴스의 데이터를 커스터마이즈하세요.

다른 스크립트에서 ScriptableObject 데이터에 액세스:

  • MonoBehaviour 스크립트 또는 기타 스크립트에서 ScriptableObject 유형의 공개 또는 직렬화된 필드를 생성하고 이를 Inspector 보기에 할당합니다.
using UnityEngine;

public class MyBehaviour : MonoBehaviour
{
    public MyScriptableObject myData;
}
  • 그러면 할당된 필드를 통해 ScriptableObject 인스턴스의 데이터에 액세스할 수 있습니다.
using UnityEngine;

public class MyBehaviour : MonoBehaviour
{
    public MyScriptableObject myData;

    private void Start()
    {
        Debug.Log("Data Name: " + myData.dataName);
        Debug.Log("Data Value: " + myData.dataValue);
    }
}

결론

ScriptableObjects는 게임 프로젝트에서 데이터를 관리하고 구성하기 위한 다목적 도구입니다. 재사용 가능하고 사용자 정의 가능한 데이터 컨테이너를 생성함으로써 ScriptableObjects는 구성, 설정 및 기타 비인스턴스 특정 정보를 저장하는 유연하고 효율적인 방법을 제공합니다. ScriptableObject의 여러 인스턴스를 생성하고 해당 데이터를 독립적으로 수정할 수 있는 기능을 사용하면 데이터 기반 시스템 생성, 게임 설정 관리, 캐릭터 능력 정의, 대화 또는 퀘스트 정보 저장 등이 쉬워집니다. ScriptableObjects를 활용하면 Unity 프로젝트의 재사용성, 유지 관리성, 확장성이 향상되어 궁극적으로 개발 프로세스가 간소화되고 더욱 강력하고 역동적인 게임을 만들 수 있게 됩니다.

추천 기사
Unity에서 런타임 애니메이터 컨트롤러 사용
Unity 셰이더를 만드는 방법
Unity 코드에서 클래스 및 객체 생성
Unity 코드에서 조건문(if-else) 생성
깨우기 대 시작
Unity의 GUILayout 소개
Unity에서 타이머 구현