Skip to content

hotfix‐StatApply

Jeon-YJ1004 edited this page Jul 29, 2023 · 3 revisions

유혁진 explain-stat Wiki 참고

아직 미구현인 스탯

로직

  1. GameManager.cs 에서 CharacterData(CharacterScriptableObject)로 캐릭터 초기 스탯 값 설정
  2. CharacterStats(float[])에 파워업과 아이템 습득에 따른 가변적 스탯 저장 스탯의 초기값에 따라 저장되는 CharacterStats의 형태가 다르다.(0상수값 /1퍼센트)
//퍼센트
CharacterStats[(int)Enums.EStat.Might] = CharacterData.Might + UserInfo.instance.UserDataSet.PowerUpStat[(int)Enums.EStat.Might];
// 상수값
CharacterStats[(int)Enums.EStat.MaxHealth] = 1 + UserInfo.instance.UserDataSet.PowerUpStat[(int)Enums.EStat.MaxHealth];
//곱셈식
CharacterStats[(int)Enums.EStat.Magnet] = CharacterData.MagnetBonus *(1+ UserInfo.instance.UserDataSet.PowerUpStat[(int)Enums.EStat.Magnet]); 

Player Stat 별 적용된 코드

Armor 방어력

[Character.cs]
private void Start()
    {
        mArmor = GameManager.instance.CharacterStats[(int)Enums.EStat.Armor];
    }
    private void Update()
    {
        mArmor = GameManager.instance.CharacterStats[(int)Enums.EStat.Armor];
    }
public void TakeDamage(float damage, int weaponIndex)
    {
        if (damage - mArmor> 0)
        {
            mCurrentHp -= Time.deltaTime * (damage - mArmor) * 2;
        }  
    }

MaxHealth

[Character.cs]
    private void Start()
    {
        mMaxExp = 100;
        mCurrentHp = GameManager.instance.CharacterData.MaxHealth * GameManager.instance.CharacterStats[(int)Enums.EStat.MaxHealth];
        mMaxHp = GameManager.instance.CharacterData.MaxHealth * GameManager.instance.CharacterStats[(int)Enums.EStat.MaxHealth];
    }

Recovery

매초 recovery스탯만큼 체력회복, 치킨 습득시 스탯 만큼 추가 회복

[Character.cs]
private void Start()
    {
        InvokeRepeating("RepeatRecovery", 1, 1);
    }
public void RestoreHealth(float amount)
    {
        if (mCurrentHp < mMaxHp)
        {
            amount = amount * (1 + GameManager.instance.CharacterStats[(int)Enums.EStat.Recovery]);
            mCurrentHp += amount;
        }
    }
private void RepeatRecovery()
    {
        if (mCurrentHp < mMaxHp)
        {
             mCurrentHp +=GameManager.instance.CharacterStats[(int)Enums.EStat.Recovery];
        }
    }

MoveSpeed 이동속도

[PlayerMovement.cs]
private const float mMOVE_SPEED = 4f;// 기본 속도
private void FixedUpdate()
    {
        mRb.MovePosition(mRb.position + mMovement * (mMOVE_SPEED*GameManager.instance.CharacterStats[(int)Enums.EStat.MoveSpeed]) * Time.fixedDeltaTime); 
    }

Magnet 자석

Magnet = 30 * character bonus * PowerUp multiplier

[GameManager.cs]
private void Start()
   {
       CharacterStats[(int)Enums.EStat.Magnet] = CharacterData.MagnetBonus *(1+ 
       UserInfo.instance.UserDataSet.PowerUpStat[(int)Enums.EStat.Magnet]); 
   }

[GoToPlayer.cs]
private float mPickupDistance = 2.5f;
private void Update()
    {
        mPickupDistance *= GameManager.instance.CharacterStats[(int)Enums.EStat.Magnet];
    }

Luck 행운

뱀서 위키- Luck 스탯 [행운 효과 정리]

  • 레벨업 선택지의 네 번째 옵션 등장 확률 증가.
  • 화로가 재등장할 확률 증가.
  • 화로 파괴 시 금화 이외의 드롭 아이템이 나올 확률 증가.
  • 보물상자에서 3/5개의 보상을 얻을 확률 증가.
  • 스테이지 아이템이 여러개 등장할 확률 증가.
  • 스테이지의 이벤트 보스가 등장하고 보물상자를 드롭할 확률 증가.
  • 박쥐, 꽃무리 등 부정적 이벤트의 확률 감소.
  • 함정의 재발동 시간 증가. <무기 관련>
  • 치명타가 발동하는 무기의 치명 확률 증가.
  • 치명타 확률 = 무기의 기본 치명타 확률 x 총 행운(기본 행운 100% + 추가 행운 + 스테이지 보너스) 등등 너무 많아서 아직 미적용된 부분이 많음
[GameManager.cs]
private void Start()
   {
       UpdateLuck(CharacterStats[(int)Enums.EStat.Luck]);
   }
UpdateLuck(CharacterStats[(int)Enums.EStat.Luck]);

Growth 성장

[GameManager.cs]
public void GetExp(float exp)
    {
        exp=exp*GameManager.instance.CharacterStats[(int)Enums.EStat.Growth];
    }

Greed 탐욕

탐욕 수치를 통한 골드 획득량 = (기본 수치 + 추가 능력치) x 스테이지 골드 보너스

[GameManager.cs]
 public void GetCoin(int amount)
    {
        amount =(int)Math.Ceiling(amount * CharacterStats[(int)Enums.EStat.Greed]);
        Coin += amount;
    }

Curse

  • 몬스터 웨이브 양,주기 증가
  • 몬스터 체력, 스피드 증가
[Enemy.cs]
private void FixedUpdate()
    {
        if (EnemyData.SpriteType == 4)
        {
            Vector2 nextVec = 0.01f * EnemyData.Speed * GameManager.instance.CharacterStats[(int)Enums.EStat.Curse] * Time.fixedDeltaTime * mDirection;
            mRb.position += nextVec;
        }
        else
        {
            Vector2 nextVec = 0.01f * EnemyData.Speed * GameManager.instance.CharacterStats[(int)Enums.EStat.Curse] * Time.fixedDeltaTime * mDirection;
    }
private void OnEnable()
    {     
        mHealth = EnemyData.MaxHP*mLevel* GameManager.instance.CharacterStats[(int)Enums.EStat.Curse];
    }

무기 별 스탯 로직

  1. Weapon.cs에서 일괄적으로 Might, Cooldown, Area, ProjectileSpeed, Duration, Amount 스탯 값 설정

Might 피해량

Cooldown 쿨타임

Area 공격범위

ProjectileSpeed 투사체 속도

Duration 지속시간

Amount 투사체 수

Revival 부활

구현하지 않기로 한 스탯

Reroll 새로고침, Skip 건너뛰기, Banish 지우기

Power Up 이지만 Player Stat이 아닌 것들..

  • Reflection
  • Ommi: stats in Vampire Survivors. It affects the damage, size, projectile speed and duration of all the weapons.
Clone this wiki locally