스탯을 각 개체 클래스의 필드로 직접 관리하게 되면, 다양한 유형의 수정치를 적용하거나 스탯 간 복잡한 상호작용을 구현하기 어렵고 스탯 관리 로직이 특정 클래스와 밀접하게 결합되어 있으면 다른 클래스나 시스템에서 재사용하기 어렵다.
새로운 스탯 타입 또는 수정치를 추가하기 위해 기존 클래스를 크게 수정해야 할 수도 있어 유지보수가 어렵고 비슷한 스탯 관리 코드가 중복될 가능성도 있다.
그렇기 때문에 기존 스탯과 결합하여 스탯을 변화시키는 수정치인 StatModifier를 따로 구현하기로 했다.
구현 계획
- 어떤 스탯을 얼마나 어떻게 수정할 것인지 정보를 받아온다.
- 새로운 수정치 인스턴스를 생성하고 초기값을 설정하는 생성자
- string 값(Modifiers)을 받아 새 인스턴스를 생성하는 생성자
Stat에서 캐릭터나 오브젝트의 다양한 수치적 속성(생명력, 공격력 등)을 관리하고 Status에서 모든 Stat을 관리하도록 Class를 분리한다.
public class StatModifier
{
public StatType Stat { get; set; }
public StatModifierType Type { get; set; }
public float Value { get; set; }
// 기본 생성자.
public StatModifier() { }
// Modifier 값을 받아온다.
public StatModifier(StatType stat, StatModifierType type, float value)
{
Stat = stat;
Type = type;
Value = value;
}
// json 파일의 Modifier를 나눠서 Enum으로 변환한다.
public StatModifier(string s)
{
string[] strings = s.Split('_');
Stat = (StatType)Enum.Parse(typeof(StatType), strings[0]);
Type = (StatModifierType)Enum.Parse(typeof(StatModifierType), strings[1]);
Value = float.Parse(strings[2]);
}
// 받은 값들을 깊은복사한다.
public StatModifier Copy()
{
return new(Stat, Type, Value);
}
}
'부트캠프 > Project' 카테고리의 다른 글
Projectile 구현 (0) | 2024.01.19 |
---|---|
Stat / Status 구현 (0) | 2024.01.18 |
Resource Manager 구현 (0) | 2024.01.15 |
<프로젝트> 팀과제 Unity 리듬 게임 회고 (2) | 2024.01.09 |
<프로젝트> 팀과제 Unity 리듬 게임(4) (1) | 2024.01.05 |