개요
한줄 요약 : animation clip에 걸어둔 event가 실행이 안됐다.
팀원분이 현재 공격 시 공격 콤보 판정이 끝나는 시점에서 호출되어야 할 메서드가 실행되지 않는 문제를 발견하셔서 공유해주셨다. 또한 공격 도중 대시를 하면 weaponController 클래스의 isAttacking 값이 true로 고정되어 공격 종료 처리가 안 되는 문제가 함께 발생했다.
내용
중간에 새로운 AI 모델 썼다가 아주 길고긴...삽질의 여정이 있었다는 점을 밝혀두겠다.
AI가 더 나은 구조라며 제시해줘서 혹한 나는 잘 작동하던 애니메이션을 Trigger로 바꾸고...Animator에서 이런저런 생쇼를 하며 구조를 다 바꿨다. 가 결국 다시 돌아왔다.
중간에 animatorController가 버그 난 건 보너스^^ git pull로 main을 가져왔는데도 버그가 났다. 어차피 main에 올라간 걸 사용할 생각이라 로컬 파일을 덮어씌워 해결했다.
하면서 이게 맞나 싶은 순간이 온다면 맞지 않을 수 있으니 10분 쉬고 다시 보라는 교훈을 꼭 명심하자.
결국 킹받은 상태로 대화하던 Ai 대화 그냥 지워버리고 코드를 다시 살펴봤다.
가장 주요한 원인은 공격 애니메이션의 마지막 프레임에 걸어둔 SetAttackComboFalse() 이벤트가 제대로 동작하지 않는 것이었다.
디버깅 해보니 PlayerActionAttack.EndAction()에서 player = null을 먼저 호출하면서 이후 SetAttackComboFalse가 내부에서 player를 참조하려 할 때 null 참조로 무시되는게 원인이었다
// 문제 코드
public void EndAction() {
player = null; // 이게 먼저 실행되면, 이후 애니메이션 이벤트에서 아무것도 못함
}
따라서 player.OnActionEnded(this)를 먼저 호출해 상태 정리를 한 뒤, player = null로 연결을 끊는 식으로 해결했다.
// 해결 코드
public void EndAction() {
player.OnActionEnded(this); // 먼저 액션 종료 처리
player = null; // 그 다음 null 처리
}
그리고 공격 중에 대시했을 때도 weaponController의 종료 메서드를 호출하도록 수정하여 isAttacking이 false 되도록 처리 했다.
public void StartDashAction()
{
// 만약 공격 중이면 강제로 공격 종료
if (_currentAction == _attackAction && _attackAction.IsActive)
{
_attackAction.EndAction(); // 애니메이션도 중단
_weaponController.AttackEnd(); // <- 이거 추가, 이 안에서 isAttacking false 됨
}
// 기존 대시 중이면 중복 실행 안 함
if (_actionDash.IsActive)
return;
_currentAction = _actionDash;
_actionDash.StartAction(this);
}
느낀점
참조 끊기 전에 null 초기화! null 초기화! 정말 확실하게 배웠다.
중간에 진짜 오늘 두통이 살짝 느껴졌다. 무슨 모래늪에 빠진 기분이었다. 그냥 진작 나올걸...그 늪 속에 보물이 있는 줄 알았네...
버그 해결이 어려웠던 이유가 무슨 버그가 난 게 아니고 그냥 SetAttackComboFalse가 작동을 안해서 뭐가 잘못된건지 도통 처음에 감이 안잡혔다. 그래도 이렇게 배우면서 해결했으니 뿌듯한 하루다.
'공부 > [TIL] Game Bootcamp' 카테고리의 다른 글
[TIL] #7. 플레이어 피격 : 멋쟁이사자처럼부트캠프 Unity 게임 개발 3기 (1) | 2025.04.29 |
---|---|
[TIL] #5. 플레이어 대시 Action : 멋쟁이사자처럼부트캠프 Unity 게임 개발 3기 (0) | 2025.04.24 |
[TIL] #4. 플레이어 공격 Action : 멋쟁이사자처럼부트캠프 Unity 게임 개발 3기 (0) | 2025.04.23 |
[TIL] #3. 플레이어 State 분리 : 멋쟁이사자처럼부트캠프 Unity 게임 개발 3기 (0) | 2025.04.18 |
[TIL] #2. 에셋 캐릭터 애니메이션 편집 : 멋쟁이사자처럼부트캠프 Unity 게임 개발 3기 (0) | 2025.04.17 |