1 minute read

ScriptableObject 개념


ScriptableObject는 유니티에서 제공하는 컨테이너로 게임에서 사용되는 데이터를 저장하고 재사용하기 위한 강력한 도구입니다.
게임 오브젝트에 직접 연결되지 않고, 에셋으로서 프로젝트 내에서 관리되며, Inspector 창에서 직관적으로 편집할 수 있습니다. (간단하게, 스크립팅이 가능한 리소스 Object라고 생각하시면 됩니다.)

유니티 공식 홈페이지

특징

  • 데이터 저장: 게임 설정, 레벨 디자인, 아이템 정보 등 다양한 종류의 데이터를 저장할 수 있습니다.
  • 재사용성: 여러 스크립트에서 동일한 데이터를 공유할 수 있어 코드의 재사용성을 높입니다.
  • 에셋: 프로젝트 외부에서도 편집 가능하며, 버전 관리 시스템과의 연동이 용이합니다.
  • 인스펙터 편집: Inspector 창에서 직관적인 UI를 통해 데이터를 편집할 수 있습니다.

장단점

장점

  • 데이터 관리: 게임 데이터를 중앙 집중화하여 관리하기 쉽습니다.
  • 재사용성: 여러 스크립트에서 동일한 데이터를 공유할 수 있습니다.
  • 확장성: 필요에 따라 새로운 ScriptableObject를 생성하여 기능을 확장할 수 있습니다.
  • 편의성: Inspector 창을 통해 직관적으로 데이터를 편집할 수 있습니다.

단점

  • 성능: 많은 수의 ScriptableObject를 사용할 경우 메모리 사용량이 증가할 수 있습니다.
  • 복잡성: 복잡한 데이터 구조를 표현하기 위해서는 추가적인 노력이 필요할 수 있습니다.

생성 방법


  1. ScriptableObject 상속
    • 새로운 C# 스크립트를 생성하고, ScriptableObject 클래스를 상속합니다.
    • CreateAssetMenu 속성을 사용하여 Asset 메뉴에서 생성할 수 있도록 설정합니다.
  2. 변수 선언
    • 저장하고 싶은 데이터 타입의 변수를 선언합니다.
    • SerializeField 속성을 사용하여 Inspector 창에서 편집 가능하도록 설정합니다.
  3. Inspector 설정
    • CustomEditor를 사용하여 Inspector 창의 UI를 커스터마이징할 수 있습니다.


먼저 아래와 같이 ScriptableObject로 만들 스크립트를 작성합니다.

scriptableobject_000

그 다음은 아래와 같이 생성한 스크립트에서 오른쪽 클릭->메뉴에서 Create-> ScriptableObject를 선택하시면 됩니다.

scriptableobject_001

그러면 아래와 같이 ScriptableObject가 생성됩니다.

scriptableobject_002



[사용 예시]

using UnityEngine;

[CreateAssetMenu(fileName = "New Item", menuName = "ScriptableObjects/Item")]
public class Item : ScriptableObject
{
    public string itemName;
    public Sprite itemIcon;
    public int itemValue;
}

[ScriptableObject을 사용하는 예시]

public class Player : MonoBehaviour
{
    public Item equippedItem;

    void Start()
    {
        // equippedItem에 저장된 아이템 정보 사용
        Debug.Log("Equipped item name: " + equippedItem.itemName);
    }
}


Top