[25.07.15] TIL( 스크립터블 오브젝트 정리 )

설민우·2025년 7월 15일

내일배움캠프 - Unity

목록 보기
76/85

Unity C# - ScriptableObject 제대로 이해하고 쓰기

✅ ScriptableObject란?

ScriptableObject는 Unity에서 데이터를 에디터에서 저장하고 공유할 수 있는 방법을 제공하는 클래스입니다. MonoBehaviour와 다르게 씬에 존재하지 않아도 되며, 메모리 사용 효율이 좋습니다.


💡 언제 사용하나요?

  • 게임 설정 데이터 (예: 무기 스탯, 아이템 정보)
  • 공통으로 사용하는 데이터 (예: 효과음 리스트, 색상 팔레트)
  • 런타임에 변경되지 않는 고정된 값

🧱 기본 구조

using UnityEngine;

[CreateAssetMenu(fileName = "NewWeaponData", menuName = "Game/WeaponData")]
public class WeaponData : ScriptableObject
{
    public string weaponName;
    public int damage;
    public float range;
}

🔧 CreateAssetMenu 속성을 통해 에디터에서 우클릭으로 쉽게 생성 가능


📦 사용 예시

public class Weapon : MonoBehaviour
{
    public WeaponData weaponData;

    private void Start()
    {
        Debug.Log($"무기: {weaponData.weaponName}, 데미지: {weaponData.damage}");
    }
}

위처럼 다양한 무기 데이터를 ScriptableObject로 만들어두면, 코드 수정 없이 무기를 교체할 수 있습니다.


🧠 장점

  • 메모리 효율성: Instantiate 없이도 존재함
  • 중앙화된 데이터 관리: 수정 시 전체 반영
  • 테스트 편의성: Play모드 이전에도 데이터 확인 가능

🛠️ 주의사항

  • 런타임에 ScriptableObject 데이터를 수정하면 원본 파일에 영향을 줄 수 있음 (복사 후 사용하는 것이 안전)
  • 직렬화되지 않는 필드는 저장되지 않음

📌 팁: 런타임용 인스턴스 생성

WeaponData runtimeInstance = Instantiate(originalData);
runtimeInstance.damage += 10;

원본 데이터 훼손 없이 사용할 수 있음!


🏁 결론

ScriptableObject는 Unity에서 데이터 중심의 설계를 할 때 강력한 도구입니다. 특히 규모가 커질수록, 코드와 데이터 분리가 중요해지는데 ScriptableObject는 이를 훌륭히 해결해줍니다.


✍️ 정리: 재사용성 높은 데이터, 공유 가능한 값은 ScriptableObject로 관리하자!

profile
클라이언트 개발자를 지망하고 있습니다.

0개의 댓글