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로 만들어두면, 코드 수정 없이 무기를 교체할 수 있습니다.
WeaponData runtimeInstance = Instantiate(originalData);
runtimeInstance.damage += 10;
원본 데이터 훼손 없이 사용할 수 있음!
ScriptableObject는 Unity에서 데이터 중심의 설계를 할 때 강력한 도구입니다. 특히 규모가 커질수록, 코드와 데이터 분리가 중요해지는데 ScriptableObject는 이를 훌륭히 해결해줍니다.
✍️ 정리: 재사용성 높은 데이터, 공유 가능한 값은 ScriptableObject로 관리하자!