ScriptableObject(SO)
스크립터블오브젝트란?
유니티에서 데이터를 편하게 관리하기 위한 것으로 데이터 컨테이너라고 보면 된다.
SO만들기
ScriptableObject를 SO라 말하겠다.
SO를 유니티에서 생성해 주겠다.
[CreateAssetMenu(fileName = "DefaultAttackSO", menuName = "MyTownController/Attacks/Default", order = 0)]
[Header("공격관리부분")]
public float damage;
[Header("넉백관리부분")]
public float knockbackPower;
위 코드처럼 CreateAssetMenu 양식은 filename, menuName, order 3가지를 작성해주면 된다.
이 부분 포멧이 있는 것으로 알지만 일단 알아보기 편하게 작성해준다.
밑에서 Header부분은 SO를 편하게 보기 위해 소제목같은 느낌으로 기능의 카테고리 별로 나누어 관리하면 좋다.
Stat 클래스 만들기(스텟)
캐릭터 별로 스텟이 다를 수 있기에 또 변신,각성, 강화물약 등의 개념이 있는 게임이라면 꼭 필요하다.
스텟 클래스를 만들어주자.
public enum StatChangeType
{
Add,
Multiple,
Override
}
[System.Serializable]
public class CharacterStats
{
public StatChangeType statChangeType;
[Range(1, 100)] public int maxHealth;
[Range(1, 100)] public float speed;
public AttackSO attackSO;
}
이 때 스텟 클래스는 하이어락히 상에서 상호작용 할 필요가 없기에 Monobehavior를 상속받지 않고, 필요한 데이터만 인스펙터에서 수정하기 위해 클래스에 Serializble을 해준다.
Serializble을 해주면 인스펙터에서 확인,수정 가능하다.
enum으로 스텟에 더해줄 Add, 또는 곱해줄 상황에 Multiple, 아에 덮어줄 Override타입을 만들어주었다.
[Range(1,100)]이런식으로 Range함수를 사용하면 1(min), 100(max)값으로 인스펙터에서 슬라이드 바가 생성되어 조절할 수 있다.