[Unity] 스크립터블 오브젝트 (ScriptableObject) 정리 - 데이터 컨테이너

Lumos Velog·2025년 7월 9일
0

Scriptable Object

유니티를 다루다 보면 데이터를 효율적으로 관리해야 하는 상황이 자주 발생한다. 개별 오브젝트나 프리팹마다 동일한 데이터를 반복해서 넣는 방식은 비효율적이며 유지보수도 어렵다. 이럴 때 활용할 수 있는 기능이 바로 ScriptableObject(SO)이다.

SO는 유니티가 제공하는 독립적인 데이터 컨테이너인데 MonoBehaviour와 달리 게임 오브젝트에 직접 붙일 수 없으며, 별도의 에셋 형태로 프로젝트 내부에서 데이터를 관리하는 용도로 사용된다.

즉, ScriptableObject는 게임 씬과 독립된 데이터를 저장하고 관리하는 데 최적화된 데이터 객체이다.




장점

  • 데이터 재사용성
    ScriptableObject는 하나의 데이터를 여러 게임 오브젝트나 시스템이 공유하여 사용할 수 있게 해준다. 데이터가 수정될 경우 이를 참조하는 모든 오브젝트에 즉시 적용되어 데이터 관리가 수월해진다.

  • 메모리 효율성
    동일한 데이터를 복제하지 않고 공유하여 참조하므로 메모리 사용을 절약할 수 있다. 특히 반복적으로 사용되는 아이템, 캐릭터 정보, 레벨 데이터 등을 관리할 때 효율적이다.

  • 에디터에서의 관리 용이성
    별도의 에셋 파일로 존재하기 때문에 유니티 에디터 내에서 직관적이고 시각적으로 관리할 수 있다. 디자이너나 기획자 등 프로그래밍 지식이 없는 팀원과도 효과적으로 협업할 수 있다.

  • 유연성 및 유지보수 용이성
    로직과 데이터를 분리하여 유지보수가 용이하고, 게임 시스템 확장 및 수정이 수월해진다. 특히 데이터 변경 시 코드 수정이 필요 없다는 점이 장기적으로 프로젝트 관리에 큰 장점이 된다.



사용법

스크립트 작성
먼저 스크립트를 작성해야 한다.

using UnityEngine;

[CreateAssetMenu(fileName = "NewItemData", menuName = "Game Data/Item", order = 1)]
public class ItemData : ScriptableObject
{
    public string itemName;
    public Sprite icon;
    public int price;
    public string description;
}

CreateAssetMenu 애트리뷰트를 사용하면 유니티 에디터에서 우클릭 메뉴로 편리하게 ScriptableObject 에셋 파일을 생성할 수 있다.


에셋 파일 생성
정의한 ScriptableObject를 저장하기 위해 에디터에서 다음과 같은 절차를 따른다.

  • 프로젝트 창에서 마우스 우클릭

  • Create → Game Data → Item을 선택

  • 새로 생성된 에셋 파일을 선택하여 인스펙터 창에서 원하는 데이터를 입력

이렇게 생성된 에셋 파일은 언제든지 다른 스크립트에서 참조하여 사용할 수 있다.




주의점

ScriptableObject는 게임 실행 도중 변경된 데이터가 자동으로 초기화되지 않고 유지되는 특성을 가진다. 따라서 플레이 중 데이터를 동적으로 변경하는 경우, 원본 데이터의 손실 방지를 위해 별도의 인스턴스를 만들어서 사용하거나 순수히 동적으로 변동되지 않는 정적데이터의 관리로만 사용한다.




마무리

유니티의 ScriptableObject는 데이터 관리 측면에서 매우 효과적이고 유용한 기능이다. 프로젝트 규모가 커질수록 그 장점이 명확하게 드러나므로, 적극적으로 사용하여 효율적인 데이터 관리 및 유지보수를 고려하는 것이 바람직하다.

0개의 댓글