스크립터블 오브젝트는 유니티에서 데이터를 저장하는데 사용할 수 있는 데이터 컨테이너에요.
하나의 스크립터블 오브젝트를 여러 게임 오브젝트에서 참조형식으로 데이터를 사용하여 값의 복제를 피해 메모리 소비를 줄일때 유용하고, 재사용성을 높여줘요.
코드와 데이터를 분리하여 코드를 더 깔끔하고 관리하기 쉽게 만들 수 있는데,

보이는 것과 같이 스크립트에서 데이터를 선언해주고 유니티 인스펙터 창에서 직접 수정하고 관리할 수 있어요.
[CreateAssetMenu (fileName = "DefaultAttackSO", menuName = "TopDownController/Attacks/Default", order = 0)]
public class AttackSO : ScriptableObject
{
[Header("Attack Info")]
public float size;
public float delay;
public float power;
public float speed;
public LayerMask target;
[Header("Knock Back Info")]
public bool isOnKcockBack;
public float knockBackPower;
public float KnockBackTime;
}
우선 스크립트를 먼저 만들어줘요.
스크립터블 오브젝트는 MonoBehaviour 가 아니라 ScriptableObject 를 상속받아요.
[CreateAssetMenu] 는 커스텀 에셋을 생성할 수 있도록 해주는 것인데 파일이름, 메뉴 트리, 메뉴 순번을 지정할 수 있어요.

위 스크립트에 보이는 것처럼 지정하면 유니티에서 지정해준 메뉴 트리대로 오브젝트 생성창이 생겨요!

오브젝트를 만들어주고 데이터 값을 설정해줍니다.

만든 오브젝트를 다른 게임 오브젝트에서 사용하시면 됩니다.