
뭐하냐진짜?
public void OnAttack(InputAction.CallbackContext context)
{
PlayerEquip playerEquip = GetComponent<PlayerEquip>();
if (context.phase == InputActionPhase.Started && playerEquip.equippedItem != null && playerEquip.equippedItem.gameObject.activeInHierarchy)
{
if (Time.time - lastAttackTime >= attackCooldown)
{
lastAttackTime = Time.time;
animator.SetBool("IsAxeAtc", true);
playerEquip.equippedItem.StartEquipInteraction();
Debug.Log("IsAxeAtc: " + animator.GetBool("IsAxeAtc"));
}
}
else
{
animator.SetBool("IsAxeAtc", false);
}
}
다른 애니메이션들도 bool값으로 처리해줬기에 공격 및 피격모션도 bool값으로 하여 true, false가 될수있게 해주었는데 공격했을때 모션도 안나가고 저런식으로 되어가지고 팀원분들에게도 보여줬는데 티배깅이라는 얘기도 나와 다같이 크게 웃엇던 적이 있다. 나도 웃엇는데 웃으면서 울었다.....
일단 문제가 되었던 부분은 InputActionPhase.Started, 이부분이 바로 else로 넘어가서 애니메이션 재생이 실행하자마자 끝나서 재생이 안된것처럼 보였고 내가 강제로 true로 바꿔도 바로 false가 되어 저런식으로 티배깅이 되어버린것...
움직임은 bool값으로 하였으나 공격/피격은 bool값으로 할 이유가 없기에 생각을 바꿔 애니메이션 파라미터를 trigger로 바꿔주었다.
public void OnAttack(InputAction.CallbackContext context)
{
PlayerEquip playerEquip = GetComponent<PlayerEquip>();
if (context.phase == InputActionPhase.Started && playerEquip.equippedItem != null && playerEquip.equippedItem.gameObject.activeInHierarchy)
{
if (Time.time - lastAttackTime >= attackCooldown)
{
lastAttackTime = Time.time;
animator.SetTrigger("IsAxeAtc");
playerEquip.equippedItem.StartEquipInteraction();
}
}
}
이렇게 하였더니 정상적으로 작동, 사실 피격은 오류나기 전에도 테스트를 못해보았으나 trigger로 바꾸고 몬스터에게 맞아보았더니

굿! 잘맞는다.

피격받는동안은 Has Exit Time을 false로 해주었으며 되돌아갈땐 true로 해주었다.
'Unity > Unity Study' 카테고리의 다른 글
| [Unity] 개인과제, ATM 만들기 - 입금, 송금 (0) | 2025.03.25 |
|---|---|
| [Unity] 3D Surviver 팀 프로젝트 중, Player 사망처리 및 애니메이션 (0) | 2025.03.25 |
| [Unity] 3D Surviver 팀 프로젝트 중, 상태(Stat) UI (0) | 2025.03.20 |
| [Unity] 3D Surviver 팀 프로젝트 중, Player Animation 설정 (feat. Mixamo) (0) | 2025.03.19 |
| [Unity] 3D Surviver 팀 프로젝트 중, 트러블슈팅 : 달리기 및 스탯변화 (0) | 2025.03.18 |