-
안녕하세요.
이번 작업은 스탯 관련 작업을 하였습니다.
Exp, Level, Hp, Attack, Def
전체적인 흐름도는 다음과 같습니다.
1. 몬스터를 잡으면 Exp가 증가한다.
2. Exp가 최대치가 되면 Level이 증가한다.
3. Level이 증가하면 Stat Point가 증가한다.
4. Stat Point로 Hp, Attack, Def를 조절할 수 있다.
5. 값을 저장하면 즉시 반영된다.
6. 재접속 시 유지된다.
우선 기존 플레이어가 공격을 당해 실행될 Hi() 함수를 다음과 같이 수정했습니다.
현재 체력과 최대 체력을 playerStat에서 받아와서 계산을 하였는데요.
" playerStat" 스크립트를 보기 전 기존 DataManager에 추가 선언된 변수를 보겠습니다.
playerLevel : 플레이어 레벨 입니다.
playerStatPoint : 스탯 포인트입니다.
playerMaxHp : 플레이어 최대 체력입니다.
playerMaxAttack : 플레이어 최대 공격력입니다.
playerMaxDef : 플레이어 최대 방어력입니다.
playerMaxExp : 플레이어 최대 경험치입니다.
playerCurrentExp : 플레이어 최대 경험치입니다.
이 값을 이용해 데이터를 저장하고, 데이터를 불러올 것입니다.
다음은 PlayerStat 스크립트입니다.
각 레벨, 포인트, 체력, 공격력, 방어력, 경험치에 관련된
변수와 컴포넌트입니다.
구현 부분에서 설명을 이어가겠습니다.
초기 저장된 데이터를 불러와 각 선언 변수에 대입을 해주었습니다.
또한 반영 동기화를 위하여
받아온 text와 hpBar 같은 경우엔 fillAmount를 업데이트해주었습니다.
이후 데이터를 한번 저장해 주었습니다.
다음은 경험치가 오를 때 호출될 ExpUpdate 함수입니다.
경험치가 증가하게 되면 저장될 데이터 값을 변경해 주고
exp Bar 같은 경우엔 게이지를 나타낼 fillAmount를 업데이트해줍니다.
또한 text도 즉시 반영이 되어야 하기에 업데이트를 같이 해주었습니다.
다음 if문을 보면
playerMaxExp <= playerCurrentExp
(최대 경험치보다 현재 경험치가 크거나 같으면)
아래 코드블록이 실행됩니다.
level을 증가시켜 주고
저장될 데이터의 값을 변경해 줍니다.
level은 InGame UI와 Stat UI 두 곳에 Level Text가 존재하기에
두 곳 모두 업데이트를 해주었습니다.
차례대로 보자면
현재 경험치 초기화
최대 경험치 증가
스탯 포인트 증가
를 해주었습니다.
*현재는 스탯 포인트 증가량을 5로 설정해 주었습니다.
다음은 Stat UI의 감소 / 증가 버튼입니다.
HpLeftButton()부터 살펴보자면
최대 체력이 1000 보다 낮다면 return으로 실행을 시키지 않습니다.
즉, hp가 초기값 아래로 내려갈 수 없습니다.
이후 HpLeftButton()를 눌렀다면 현재 설정한 hp 값을 감소시킨다는 의미로
playerStatPoint를 증가시켜줍니다.
playerStatPointText.text = playerStatPoint.ToString()
로 텍스트에도 즉시 반영시켜 주었으며,
Hp 조절 값은 100으로 설정해 주었습니다.
반대로
HpRightButton()는
playerStatPoint가 0보다 작거나 같으면 return을 해 주었습니다.
즉 playerStatPoint가 1개 이상 있어야 동작을 하게 해주었습니다.
이후 로직은 HpLeftButton()와 반대입니다.
이하 동일
다음은 Reset 버튼을 눌리면 실행될 ResetPoint() 함수입니다.
변수 변경과 저장될 데이터 값 변경.
그리고 텍스트와 이미지를 업데이트해주었습니다.
추가 로직으로 if (playerMaxHp <= playerCurrentHp)을 걸어 주었는데
현재 체력이 1100일 때 최대 체력을 초기화하여 1000이 되면 꼬임 현상이 발생하여서
현재 체력이 최대 체력보다 높다면, 최대 체력으로 조정해 주었습니다.
마지막으로 SavePoint()입니다.
현재 스탯포인트, 체력, 공격력, 방어력을
전될 데이터 값에 반영해 주었습니다.
(exp는 Hit() 함수가 실행될 때 값이 저장됩니다)
현재 원하던 로직은 잘 구현이 되는 것 같습니다.
영상을 보면 아시겠지만 currentHp 같은 경우에는
현재 재접속하게 되면 maxHp 값으로 변경이 됩니다.
즉, 체력이 Full이 되는데요
데이터를 저장해서 같이 관리를 하려다가
체력 회복 스킬도 구상 중에 있고
재접속을 하였는데 Hp가 제로에 가까운 것보다는 가득 차있는 것이 좀 더 낫지 않을까 해서 내버려두었습니다.
초기 작성에는 하나씩 테스트하면서 하느라 어려움이 약간 있었는데
변수 값 변경 = 저장된 데이터 값 변경
+ 관련 동기화(텍스트, 이미지) 변경
의 구상이 잡히고 나니 한결 수월하게 작업을 했습니다.
확실히 신경 쓸게 많아진다는 건
완료했을 때 뿌듯함도 많아지는 것 같습니다!
왠지 기분 좋은 데요ㅎㅎ
다음 작업 목록은 씬 이동과 간단한 Sound를 추가해서 작업을 하도록 하겠습니다.
감사합니다!
다들 좋은 하루 보내세요!★
'유니티 프로젝트 > RPG-2D' 카테고리의 다른 글
Land Of Memories - Hp(Hit) - ObjectPool (0) 2024.11.21 Land Of Memories - Menu - Stage (0) 2024.11.21 Land Of Memories - UI Design (0) 2024.11.21 Land Of Memories - Quest (2) - KeyObject (0) 2024.11.20 Land Of Memories - Quest (1) (0) 2024.11.20