2024-08-01

대량의 데이터를 저장하는 데 사용할 수 있는 데이터 컨테이너.
스켈레톤 , 고블린 , 오우거 등의 몬스터 종류가 존재하고,
프리팹으로 만들어둔 각각의 몬스터들은 오브젝트 풀을 통해 인스턴스화 된다.
모든 몬스터들의 스탯 정보가 담긴 데이터의 사본을 생성하게 된다면,
메모리가 상당히 낭비될 것이라 MonsterSO 를 제작하였다.
using UnityEngine;
[CreateAssetMenu(fileName = "Monster",menuName = "Monster/Stats")]
public class MonsterSO : ScriptableObject
{
[field:Header("Monster Stats")]
[field: SerializeField] public float HP { get; private set; }
[field: SerializeField] public float STR { get; private set; } // 공격력
[field: SerializeField] public float DEF { get; private set; } // 방어력
[field: SerializeField] public float LCK { get; private set; } // 크리티컬 관련 스탯
[field: Header("Monster AI")]
[field: SerializeField] public float WalkSpeed { get; private set; } // 순찰 시 이동 속도
[field: SerializeField] public float WanderRadius { get; private set; } // 순찰 반경
[field: SerializeField] public float WanderWaitTime { get; private set; } // 순찰 대기 시간
[field: Header("Monster Attack State")]
[field: SerializeField] public float RunSpeed { get; private set; } // 공격 시 이동 속도
[field: SerializeField] public float DetectRadius { get; private set; } // 타겟 감지 반경
[field:SerializeField] public float AttackRate { get; private set; } // 공격 속도
[field: SerializeField] public float AttackDistance { get; private set; } // 공격 사거리
[field: SerializeField] public float Exp { get; private set; } // 처치 시 경험치
}
| Goblin | Skeleton |
|---|---|
![]() | ![]() |
몬스터들의 능력치를 밸런스에 맞게 조절하는 작업도 함께 진행해봤는데,
플레이어와 밸런스를 적당히 유지하는 게 쉽지 않은 것 같다.
기획적인 부분은 쉽진 않지만, 테스트하는 과정에서 재미를 느낄 수도 있는 것 같다.