ScriptableObject

JJW·2025년 5월 23일
0

Unity

목록 보기
30/34

평소 사용은 자주 하였지만 좀 더 자세하게 알아보기 위한 시간을 가지도록 하겠습니다.

ScriptableObject란 무엇인가 ?

  • Unity 엔진에서 MonoBehaviour처럼 씬에 붙이지 않고도 데이터 자산으로 관리할 수 있는 클래스입니다.
  • 게임 내 공통 설정이나, 다양한 데이터들을 코드가 아닌 에셋 형태로 보관하여 사용할 때 유용합니다.
using UnityEngine;

[CreateAssetMenu(fileName = "NewGameSettings", menuName = "Config/GameSettings")]
public class GameSettings : ScriptableObject
{
    public int maxPlayers;
    public float spawnInterval;
    public Color backgroundColor;
}
  • Asset -> Create -> Config -> GameSettings를 통해 에셋을 생성가능합니다.

ScriptableObject의 장점

  • 메모리 효율성
    • 씬에 붙이지 않으므로 씬 로딩 및 언로드 간 GC 부담이 적습니다.
    • 다수의 Monobehaviour 대신 공용 데이터는 ScriptableObject로 분리하여 관리가 가능합니다.
  • 재사용성과 버전 관리
    • 에셋으로 저장되며 Git 등 버전 관리에 용이합니다.
    • 여러 씬 및 프리팹에서 같은 데이터 인스턴스를 참조할 수 있습니다.
  • 런타임 데이터 분리
    • 데이터와 로직을 철저히 분리시킵니다.
    • 개발자가 아닌 비개발자도 손쉽게 추가하거나 수정이 가능합니다.
      (개발자가 에디터코드로 사용하기 쉽게 만들어주면 더 좋다.)
  • 런타임 수정 지원
    • 에디터 모드에서 데이터를 변경하면 즉시 갱신합니다.
    • 플레이 모드에서도 AssetDATABASE 없이 읽어올 수 있어 편리합니다.

ScriptableObject 사용처

  • 게임 밸런스
  • 레벨 데이터
  • 대화 스크립트
  • 이벤트 데이터 (확률표 ...)
  • 상태머신 설정

다양한 활용 방법

  • Addressables이나 Validation, 이벤트 시스템과 연동하여 사용이 가능합니다.
  • 커스텀 에디터를 통해 비개발자도 손쉽게 사용이 가능하도록 만들 수 있습니다.

ScriptableObject의 단점

  • PlayMode에서 변경한 값이 에디터에도 적용됩니다.
  • 순환 참조로 에디터가 느려집니다.
  • so 값이 변하지 않습니다.

사용하면서 느낀점

  • 사용하면서 좋았던 점은 커스텀에디터 코드를 사용하여 인스펙터를 잘 구성하면 비개발자도 손쉽게 사용이 가능하단 점에서 좋았습니다. 그리고 정리가 되어보이고 값을 쉽게 변경가능하다는 점에서 좋았습니다.
    하지만 값 변경의 경우에는 프로젝트마다 다르겠지만 저는 문서를 불러와 값을 매칭시키는 형태라 패치 부분에서는 큰 차이점을 못느꼇고 생각보다 구조 짜기가 쉽지 않다는 점이 단점이였던 것 같습니다.
profile
Unity 게임 개발자를 준비하는 취업준비생입니다..

0개의 댓글