반응형
미니 RPG
레벨업
✈ 스탯 데이터
📄StatData.json
{
"stats": [
{
"level": "1",
"maxHp": "200",
"attack": "20",
"totalExp": "0"
},
{
"level": "2",
"maxHp": "250",
"attack": "25",
"totalExp": "10"
},
{
"level": "3",
"maxHp": "300",
"attack": "30",
"totalExp": "20"
}
]
}
각 레벨에서의 기본 스탯
📜Stat
[Serializable]
public class Stat
{
public int level;
public int maxHp;
public int attack;
public int totalExp;
}
json파일의 내용과 멤버변수 이름 일치시켜줘야 한다.
레벨업 처리
📜PlayerStat
public class PlayerStat : Stat
{
[SerializeField]
protected int _exp;
[SerializeField]
protected int _gold;
public int Exp {
get { return _exp; }
set
{
_exp = value;
// 레벨업 체크
int level = Level;
while (true)
{
Data.Stat stat;
if (Managers.Data.StatDict.TryGetValue(level + 1, out stat) == false) // 만렙이면
break;
if (_exp < stat.totalExp) // _exp가 현재 레벨에서의 totalExp 보다 적으면 이제 레벨 증가 필요 없으므로 그만!
break;
level++;
}
if (level != Level)
{
Debug.Log("Level Up!");
Level = level;
SetStat(Level);
}
}
}
public int Gold { get { return _gold; } set { _gold = value; } }
플레이어의 경험치를 세팅해줄 때 고려해야하는 점은, 경험치로 인한 레벨 상승이다. 경험치가 메이플스토리 재획비와 같이 한꺼번에 많이 들어온다면 level이 1 만 증가하는 것이 아니라 더 뛰어 넘을 수도 있다는 점이다. 따라서 레벨 업 과정을 while 문 내에서 진행한다.
위 과정을 경험치 세팅시마다 해줘야하니까 아싸리 경험치 프로퍼티의 set 에서 해주는 것이다.
private void Start()
{
_level = 1;
_exp = 0;
_defense = 5;
_moveSpeed = 5.0f;
_gold = 0;
SetStat(_level);
}
public void SetStat(int level)
{
Dictionary<int, Data.Stat> dict = Managers.Data.StatDict;
Data.Stat stat = dict[level]; // level을 Key로 사용하기로 약속했었다. 레벨마다 스탯이 달라지니까!
_hp = stat.maxHp;
_maxHp = stat.maxHp;
_attack = stat.attack;
}
protected override void OnDead(Stat attacker)
{
Debug.Log("Player Dead");
}
📜Stat
public virtual void OnAttacked(Stat _attacker)
{
int damage = Mathf.Max(0, _attacker.Attack - Defense);
Hp -= damage;
if (Hp <= 0)
{
Hp = 0;
OnDead(_attacker);
}
}
protected virtual void OnDead(Stat attacker)
{
PlayerStat playerStat = attacker as PlayerStat;
if (playerStat != null)
{
playerStat.Exp += 100;
}
Managers.Game.Despawn(gameObject);
}
몬스터가 플레이어한테 죽으면 플레이어의 경험치를 100만큼 올려준다! 😁
반응형
'공부 > 인프런 - Rookiss' 카테고리의 다른 글
Part 4. 게임 서버 (0) | 2023.09.03 |
---|---|
Part 3-13-9. 미니 RPG : 몬스터 자동 생성, 完 (0) | 2023.09.02 |
Part 3-13-7. 미니 RPG : Destory (0) | 2023.09.01 |
Part 3-13-6. 미니 RPG : 몬스터 AI (0) | 2023.09.01 |
Part 3-13-5. 미니 RPG : 체력 게이지 (0) | 2023.08.31 |