[스탯 시스템]
■ StatData
● 캐릭터의 기본 스탯을 데이터 형태로 정의하는 ScriptableObject
● List<StatEntry> 형태로 다양한 스탯 타입을 유연하게 보관한다.
● 설계 포인트
○ ScriptableObject를 사용하여 에디터에서 다양한 캐릭터의 능력치를 시각적으로 편집할 수 있다.
○ List<StatEntry>는 StatType과 baseValue 쌍을 통해 구조적으로 단순하고 직관적인 구성을 제공한다.
● 장점
○ 데이터 드리븐 방식으로 캐릭터 스탯 설계 → 코드를 건드리지 않고도 다양한 캐릭터 제작 가능
○ 팀 내 비개발자도 손쉽게 캐릭터 스탯 조정 가능
● 구조
public enum StatType
{
Health,
Speed,
ProjectileCount,
}
[System.Serializable]
public class StatEntry
{
public StatType statType;
public float baseValue;
}
[CreateAssetMenu(fileName = "New StatData", menuName = "Stats/Character Stats")]
public class StatData : ScriptableObject
{
public string characterName;
public List<StatEntry> stats;
}
■ StatHandler 클래스
● StatData에 정의된 데이터를 런타임 시 Dictionary로 캐싱
● 스탯 조회 및 수정 기능을 통합적으로 제공
● 설계 포인트
○ Awake()에서 StatData를 기반으로 초기 스탯을 Dictionary에 세팅
○ ModifyStat 함수는 지속적 변화/일시적 변화(버프, 디버프) 구분 가능
○ IEnumerator를 통한 일정 시간 후 스탯 복구 기능 포함
● 장점
○ 빠른 스탯 접근 가능 (Dictionary 캐싱)
○ 확장 가능한 스탯 변경 시스템 (버프/디버프 대응)
● 구조
public class StatHandler : MonoBehaviour
{
public StatData statData;
private Dictionary<StatType, float> currentStats;
public float GetStat(StatType statType) { ... }
public void ModifyStat(...) { ... }
}
'내일 배움 캠프 > 뭐하지' 카테고리의 다른 글
| 렌더링 파이프라인 (2) (1) | 2025.06.05 |
|---|---|
| 아이템 생성과 사용 시스템 (0) | 2025.06.04 |
| 오브젝트 풀링 (0) | 2025.06.04 |
| 게임 데이터 저장과 로드 (0) | 2025.06.04 |
| 스테이지 구조 설계 (0) | 2025.06.04 |