본문 바로가기

내일 배움 캠프/뭐하지

스탯 시스템 설계

[스탯 시스템]

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