Skip to content

develop LevelUpSystem

pianoop edited this page Mar 17, 2023 · 17 revisions

주인공 레벨업 기능 관리

경험치 획득 -> 레벨업 발생시 시간 멈추고 스킬 선택화면 등장 -> 선택, 스킬 갱신 후 게임 재개
뽑기에 사용된 RandomPicker 클래스는 다른 분의 코드를 가져와서 사용했습니다, 자세한 사용법은 참조 부분에 링크로 남겨놓았습니다.

  • 여기서 말하는 "장비"라 함은 무기와 악세서리를 총칭하는 말입니다.

목차

Summary

  1. 레벨업

    • 경험치 획득 후 현재 maxExp 이상이면 현재 경험치를 초기화, maxExp에 dExp만큼 더해주기(선형 증가), 레벨업 함수 호출.
  2. 행운에 따른 선택지 개수 정하기

    • 기본 3개, luck에 따라 1개 추가 가능 (luck 수치 1당 1%, 100 이상이면 100%로 4개)
  3. 스킬/장신구를 뽑을 때 나뉘는 2가지 경우

    • 스킬/장신구 소지 수가 각각 6개로 모두 꽉 차있고 모두 마스터 한 경우 -> 스킬/장신구 대신 체력, 돈을 고르는 선택지 제공
    • 마스터한 장비들을 제외하고 뽑기
  4. 뽑힌 장비 목록을 LevelUpUI에 넘겨주어 그 중 하나를 선택할 수 있게 하기 (develop - LevelUpUI 에서 계속)

Stat

namespace Enums
{
    public enum Stat
    {
        Might,
        Armor,
        MaxHealth,
        Recovery,
        Cooldown,
        Area,
        ProjectileSpeed,
        Duration,
        Amount,
        MoveSpeed,
        Magnet,
        Luck,
        Growth,
        Greed,
        Curse,
        Revival,
        Reroll,
        Skip,
        Banish,
        Ommi,
        Reflection,
    }
}

CharacterStats[(int)Enums.Stat.Luck]

CharacterStats[(int)Enums.Stat.사용할 스탯] 으로 해당하는 스텟을 가져올 수 있습니다.
stat들을 하나하나 변수로 관리하기는 힘들므로 float 배열에 넣어서 관리, 그냥 사용할 경우 index번호랑 스탯을 연결짓기 어려우므로 열거형을 이용하여 string <-> int 형변환 하듯이 사용해주었습니다.

UpdateLuck

image
image

  • 먼저 뽑기 목록을 초기화
  • 소지 장비 수가 최대치에 도달했다면 뽑기 목록에 가지고 있는 장비 중 마스터 하지 않은 장비만 넣어줌
  • 최대치에 도달하지 않았다면 마스터한 장비를 제외한 모든 장비들을 넣어줌

GetExp

image
필요 경험치(mMaxExp) = 초기 필요 경험치 + 레벨 * 경험치 증가폭 상수(Constants.DeltaExp)
위의 공식을 코드로 구현한 함수

LevelUp

image

  • character의 level을 1 더해줌
  • RandomPickUp()함수를 통해 현재 뽑힌 장비 목록을 받아옴
    • pickUps는 List<Tuple<int, int, int>>로 Tuple 내의 각 int들의 의미는 < 0: 무기/ 1: 악세/ 2: 기타(돈, 회복), 해당 종류의 index 번호, 0: new/ 1:old >를 의미함
  • ...LoadLevelUpUI() 함수에 뽑힌 목록들과 현재 스탯, 보유 무기/ 악세를 넘겨주어 레벨업 UI를 표시

RandomPickUp

image
image

  • getPossibleChoice: 소지 장비 수가 최대치에 도달했는지 아닌지에 따라 뽑을 수 있는 최대 장비의 개수를 참조 변수에 대입해줌.

image

  • getChoice: 현재 luck수치를 확률로 3개를 뽑을 수 있는지 4개를 뽑을 수 있는지를 반환해주는 함수.
    • 위의 두 함수에서 얻은 값을 기반으로 최대 몇 개를 뽑아야하는지를 maxChoice에 대입해줌
    • 0개일 경우 반환 값에 골드, 회복을 넣어줌

image

  • getOnePickUp: 현재 뽑을 수 있는 장비의 개수와 이미 뽑힌 장비들의 List를 넘겨주어 랜덤 장비 한개를 반환하는 함수이다. (반환 값의 의미는 주석 참고)
    image
    getPickType: 뽑을 수 있는 장비 수를 기반으로 무기와 악세서리 중 어떤 타입을 뽑을 것인지를 반환하는 함수, 둘다 뽑을 수 있다면 50% 확률로 랜덤 선택
    image
    getWeaponRandomPick: 이미 뽑힌 장비 리스트를 넘겨주어 해당 리스트에 속하지 않은 장비를 하나 뽑아서 index를 반환하는 함수

mTransWeaponIndex는 배열에 해당 장비의 index를 넘겨주면 현재 가지고 있는 장비목록(Weapons, Accessories)에서의 index번호를 반환, 없다면 -1를 반환하는 배열이다. -1를 반환한다면 가지고 있지 않는 장비이므로 new/ old를 구분하는 데 사용할 수 있다.
이후 뽑힌 장비의 종류에 따라 possibleWeapon(Accessory)Choice의 값을 줄여준다.

ApplyItem

선택지에서 유저가 고른 pickUp을 받아서 적용하는 함수. 새로 얻은 장비의 경우 getWeapon/Accessory를, 이미 있는 장비의 경우는 UpgradeWeapon/Acc.. 함수를 호출한다.
applyEtc함수는 회복, 돈 관련 처리를 맡는다.

reference

UI창을 제일 위로
2차원 배열을 inspector창에서
가중치 랜덤 뽑기

Clone this wiki locally