카테고리 없음

치명타 확률과 이펙트

rxo2 2025. 3. 31. 21:01

공격시 일반 공격과 치명타 공격에 적용된  파티클이 알맞지 않게 이팩트가 발생, 

또는 랜덤으로 발생하거나 한번 클릭에 두 가지 모두다 발생하는 버그.

 void Update()
 {
     if (Input.GetMouseButtonDown(0))
     {
         ClickAttack clickAttack = gameObject.GetComponent<ClickAttack>();

         if (clickAttack != null)
         {
             bool isCritical = Random.value < clickAttack.criticalPercent;
             PlayParticleSystem(isCritical);
         }
     }
     if (Input.GetMouseButtonUp(0))
     {
         StopParticleSystem();
     }
 }
public void AttackMonster(float damage)
{
    if (pokemonMonster != null)
    {
        monster.TakeDamage(damage);
        Debug.Log($"몬스터를 {damage}만큼 공격! 남은 체력: {monster.GetPercentage() * 100}%");
    }
    float finalDamage = damage;

    if (Random.value < criticalPercent)
    {
        finalDamage *= criticalMultiplier;
        Debug.Log($"치명타 {finalDamage} 데미지");
    }
    else
    {
        Debug.Log($"일반 공격: {finalDamage} 데미지");
    }

    monster.TakeDamage(finalDamage);
}

 

 

수정안 - 2군데에 있는 랜덤 확률 값을 하나의 랜덤값으로 사용.

그리고 위의 파티클 클래스의 Update() 의 내용을 삭제

(ClickAttack에서 이미 OnClickAttack()을 통해 공격을 관리하고 있으므로, 중복 실행됨)

 

AttackMonster 의 코드 내용 변경

public void AttackMonster(float damage)
{
    // 치명타 발생 여부를 랜덤 값(0~1)과 criticalPercent를 비교하여 결정
    lastAttCriticalCheck = Random.value < criticalPercent;

    // 만약 치명타가 발생했다면, 데미지에 치명타 변수를 곱함
    float finalDamage = lastAttCriticalCheck ? damage * criticalMultiplier : damage;

    Debug.Log(lastAttCriticalCheck ? "치명타" : "일반 공격");

    // 현재 씬에서 Monster 객체를 찾아서 가져옴
    Monster monster = FindObjectOfType<Monster>();

    // 몬스터가 존재하면 데미지를 적용
    if (monster != null)
    {
        monster.TakeDamage(finalDamage); // 몬스터의 체력을 감소시킴
    }

    // 현재 씬에서 Particle 객체를 찾아서 가져옴
    Particle particleEffect = FindObjectOfType<Particle>();

    // 만약 파티클 시스템이 존재하면, 치명타 여부에 따라 적절한 파티클을 재생
    if (particleEffect != null)
    {
        particleEffect.PlayParticleSystem(lastAttCriticalCheck);
    }
}

 

 

위와 같이 수정하여 공격에 맞는 파티클 효과 적용완료,

랜덤으로 발생하거나 한번 클릭에 두 가지 파티클이 발생하는 버그 수정 완료.