공격시 일반 공격과 치명타 공격에 적용된 파티클이 알맞지 않게 이팩트가 발생,
또는 랜덤으로 발생하거나 한번 클릭에 두 가지 모두다 발생하는 버그.
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);
}
}
위와 같이 수정하여 공격에 맞는 파티클 효과 적용완료,
랜덤으로 발생하거나 한번 클릭에 두 가지 파티클이 발생하는 버그 수정 완료.