게임이 완성되어 가던 차에 갑자기 몬스터 애니메이션에 문제가 생겼습니다. 잘 작동되던 공격 애니메이션이 처음 실행될 때 공격 애니메이션이 재생이 끝난 후에 다음 애니메이션으로 넘어가야 하는데 재생이 시작하자마자 한 프레임만에 다음 애니메이션으로 넘어가는 현상이 발생했습니다.
우리 프로젝트의 캐릭터들은 모두 FSM 패턴을 통해 애니메이션을 재생합니다. 상태가 변화될 때 애니메이션의 Trigger도 설정해서 애니메이션을 재생하도록 구현하였습니다. 이 때, 공격 트리거가 설정되고 공격 애니메이션이 재생이 시작되었을 때, 이전 애니메이션의 트리거가 꺼지지 않아 바로 공격 애니메이션의 재생이 끝나버리고 이전 애니메이션 트리거의 애니메이션이 재생이 되는 것이였습니다.
다음 상태로 전환된며 새 Trigger를 설정해줄 때, 이 Trigger를 저장해줍니다. 그리고 다음 새 Trigger를 설정할 때, 저장해둔 Trigger를 ResetTrigger 메서드를 통해 초기화해줍니다. 그러면 Trigger가 여러 개 겹치는 현상을 방지할 수 있습니다.
어떤 메서드를 만들 때, 메서드가 실행되지 않아야 할 조건에는 메서드를 종료해주는 것처럼 안전 코딩의 일종이라고 볼 수 있을 것 같습니다. 후에 일어날 수 있는 오류나 오작동을 미리 방지하는 것이죠.
anim = GetComponent<Animator>();
string curTrigger;
...
anim.ResetTrigger(curTrigger);
anim.SetTrigger(name);
curTrigger = name;