Chapter 13-10. 미니 RPG : 레벨업
카테고리: Unity Lesson 2
태그: Unity Game Engine
인프런에 있는 Rookiss님의 [C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진 강의를 듣고 정리한 필기입니다. 😀
🌜 강의 들으러 가기 Click
Chapter 13. 미니 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만큼 올려준다!
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글 남기기