WaitUntil은 코루틴과 함께 매우 유용한 도구
특정 조건이 참이 될 때까지 실행을 일시 중단한다. 위에 경우는 특정 애니메이션이 끝나거나
상태 변화를 체크하며 기다리는 상황에서 유용하게 사용 될것 같다.
But
WaitUntil은 매 프레임마다 검사되어 성능문제가 일어날 수 있고, 무한 루프의 위험이 있으니 조심해서 사용하자.
참고로 normalized >= 1.0f의 뜻은
진행 상태 0.0 (시작)에서 (완료)1.0 사이의 값으로 반환된다.
=========================

ScritableObject로 애니메이션 호출하는 방식인데

첫번째 애니메이션"Player_Skill05_1"이 끝나면 "Player_Skill05_2" 애니메이션이
작동할수있도록 하고있었으나 작동이 되지않았다.
"Player_Skill05_2" 에서 "Player_Skill05_3"으로는 WaitUntil을 통해
잘 대기하다 작동이 되었는데...
왜 안될까?
문제는
애니메이션 스테이트 체크의 타이밍 문제였다.
GetCurrentAnimatorStateInfo(0)는 때때로 애니메이션의 상태를 체크하는 것이 예상보다 빠르기 때문에, 원하는 애니메이션 상태로 전환되기전에 체크가 이루어질 가능성이 있는 것이다.
public void ActivateSkill()
{
animator.Play("Player_Skill05_1"); // 이곳에 추가
StartCoroutine(ExeCuteJump());
}
private IEnumerator ExeCuteJump()
{
ActivateMeshes();
animator.Play("Player_Skill05_1"); // 이곳도 추가
}
그래서 "Player_Skill05_1"에 어떤 애니메이션을 넣든, 어느 위치에 animator.Play를 집어넣어도
"Player_Skill05_2" 로의 전환이 안 된 것이다.
해결을 하는 방법은 Animation의 StateCheck Timing 이름에 있다. 살짝의 딜레이를 준다.

yield return new WaitForSeconds(0.1f) 살짝의 딜레이를 주면 해결완료
'Unity Engine > Unity Common' 카테고리의 다른 글
| [Unity 3D] Mathf.Atan2() && Mathf.Rad2Deg (0) | 2023.11.04 |
|---|---|
| 캐릭터의 모델 높이 구하기 (0) | 2023.11.04 |
| 유니티 쉐이더 컷씬 만들기 (0) | 2023.10.20 |
| 내일 할 것 :메기도 구현하기 (0) | 2023.10.19 |
| Unity 1개월차 프로젝트 제작 후기 (1) | 2023.09.08 |