Unity_Scriptable Object

HanJaeHoon·2024년 10월 22일
0
post-thumbnail

Unity로 게임을 개발하다 보면, 아이템이나 스킬 같은 다양한 데이터를 어떻게 쉽게 관리할 수 있을까 고민할 때가 많습니다. Scriptable Object는 이런 고민을 해결해주는 아주 유용한 도구입니다.

1. Sciptable Object 란?


Scriptable Object는 Unity의 객체이며, 메모리 효율적으로 데이터를 저장할 수 있는 방법 중 하나.
MonoBehaviour와 달리, 씬에 종속되지 않고 독립적인 데이터 보관이 가능.

2. Scriptable Object의 장점


  • 데이터 재사용성: 여러 오브젝트에서 같은 데이터를 공유할 수 있음.

  • 메모리 효율: 데이터는 한 번만 로드되고 여러 곳에서 참조 가능.

  • 코드와 데이터의 분리: 게임플레이 로직과 데이터를 깔끔하게 분리하여 유지보수성이 높아짐.

3. Scriptable Object의 사용 사례


  • 아이템 시스템: 각 아이템에 대한 데이터를 Scriptable Object로 저장하여 쉽게 관리.

  • 스킬 시스템: 스킬의 속성(데미지, 쿨타임 등)을 Scriptable Object로 관리.

  • 레벨 데이터: 각 레벨의 설정값을 저장하여 빠르게 참조 가능.

4. Scriptable Object 만들기


1. 새 Scriptable Object 클래스 만들기

먼저, Scriptable Object는 일반 클래스와 달리 MonoBehaviour를 상속받지 않고, ScriptableObject를 상속받아야 합니다. 이 클래스는 Unity의 에디터에서 데이터 자산으로 만들 수 있는 객체입니다. 예를 들어, 게임의 아이템 데이터를 저장할 수 있는 간단한 Scriptable Object 클래스를 만들어보겠습니다.

using UnityEngine;

[CreateAssetMenu(fileName = "NewItem", menuName = "Inventory/Item")] // 에디터에서 바로 생성 가능하게 하는 속성
public class Item : ScriptableObject
{
    public string itemName;     // 아이템 이름
    public Sprite icon;         // 아이템 아이콘
    public int itemValue;       // 아이템 가치
}

2. [CreateAssetMenu] 속성 사용하기

[CreateAssetMenu]는 Unity 에디터에서 간편하게 Scriptable Object를 생성할 수 있게 해주는 속성입니다. 이 속성을 추가하면, Unity 에디터에서 우클릭 → Create 메뉴에 새로운 항목이 추가됩니다. 예를 들어, 위 코드에서 menuName이 "Inventory/Item"으로 설정되어 있기 때문에, 에디터에서 쉽게 새로운 아이템 데이터를 만들 수 있습니다.

[CreateAssetMenu(fileName = "NewItem", menuName = "Inventory/Item")]

  • fileName: 생성할 자산의 기본 파일 이름.
  • menuName: 에디터의 Create 메뉴에서 어떻게 보일지 결정.

이 속성을 설정하면, 에디터 상에서 우클릭 후 Create > Inventory > Item을 선택해 쉽게 아이템 데이터를 만들 수 있습니다.

3. Scriptable Object 자산 생성하기


이제 Unity 에디터에서 직접 Scriptable Object를 만들어 봅시다.

  1. 프로젝트 뷰에서 우클릭.
  2. Create > Inventory > Item을 선택.
  3. 새로 생성된 NewItem 파일이 프로젝트에 추가된 것을 확인.
  4. 파일을 클릭하면 Inspector에서 itemName, icon, itemValue와 같은 데이터를 입력할 수 있습니다.

4. Scriptable Object 활용하기


이제 Scriptable Object를 게임에서 어떻게 사용할지 알아보겠습니다. 생성한 아이템 데이터를 다른 스크립트에서 불러와 활용할 수 있습니다. 예를 들어, 캐릭터가 인벤토리에 아이템을 추가하는 스크립트를 만들어봅시다.

using UnityEngine;

public class Inventory : MonoBehaviour
{
    public Item[] items;  // 인벤토리에 아이템을 저장할 배열

    void Start()
    {
        foreach (Item item in items)
        {
            Debug.Log(item.itemName + " - " + item.itemValue);
        }
    }
}

이렇게 하면, Inventory 스크립트의 items 배열에 여러 Scriptable Object 인스턴스를 추가할 수 있습니다. 게임이 시작될 때 각 아이템의 이름과 가치를 콘솔에 출력할 수 있죠.

5. Scriptable Object 장점


Scriptable Object는 여러 오브젝트에 공통으로 사용할 수 있는 데이터 저장소로 활용할 수 있기 때문에, 다음과 같은 장점을 제공합니다:

  • 데이터 재사용: 동일한 데이터를 여러 오브젝트에서 공유 가능.

  • 메모리 절약: 중복된 데이터가 메모리에서 반복 생성되지 않고 한 번만 로드됨.

  • 유지보수성: 코드와 데이터의 분리로 구조가 깔끔해지고 유지보수가 용이해짐.

profile
게임 개발자

0개의 댓글