애니메이션 도중, 다른 애니메이션으로 전환할 때
CurFrame으로 현재 애니메이션의 프레임을 가져와서,
다른 애니메이션에서 해당 프레임부터 재생을 시작하는 기능을 만들었습니다.
하지만 종종 CurFrame으로 마지막 프레임을 가져와 재생할 경우
해당 애니메이션의 처음 프레임이 노출되는 경우가 발생하는데
어제부터 원인을 도저히 찾을 수 가 없네요...

위 Gif의 초반 부분을 보시면 그냥 애니메이션을 실행시키면 잘 진행됩니다.
하지만 지금 재생중인 메시그룹과 다른 메시그룹으로 이루어진 애니메이션을
(메시 그룹은 Side, Front, Back 3가지로 이루어져 있고 좌우는 Flip으로 처리합니다)
PlayAt으로 실행 시킬 시 애니메이션의 첫 프레임의 모습이 잠깐씩 보입니다.
(첫 프레임 - 지면에 서있는 모습)
원래는 상 하 때도 문제가 보이고 더 많이 보여야 하는데 gif 녹화 툴이 좋지 않아서
많이 생략되어 보이네요.
(공중에서 좌우 전환은 Flip으로 처리되는 부분이라 오류가 발생하지 않습니다)

위 점프 애니메이션을 사용할 때의 코드입니다.
실험을 위해
jumpingAnimeData = portrait.PlayAt(_animeName, currentframe);
윗줄에 portrait.StopAll(); 이나 portrait.PauseAll(); 를 사용해봤지만 반응은 같았습니다.

위에 설명했지만
애니메이션들은 Back, Side_Right, Front
그룹인 총 3가지 그룹으로 이루어진 애니메이션들이고
각각 애니메이션들은 반복 재생이 비 활성화 되어 있으며
시작 프레임과 종료 프레임, FPS가 같은 상태들입니다.
혹시 키 입력 시 코드상 오류로
점프가 아닌 다른 애니메이션이 시작되는게 아닐까도 생각하여
(당연히 jump중일땐 다른부분이 막혀서 안되는게 당연하지만)
다른 애니메이션 실행부분에 모두 디버그 출력을 입력하여
일일히 노가다로 체크해봤지만
점프 애니메이션 도중 다른 애니메이션이 출력되는 경우는 없었습니다...
혹시 윗부분에 써놓은 코드가 문제인지
아니면 다른 설정부분의 문제가 있는것 인지 알 수 가 없네요 ㅠㅠ
* 추가
게시글 올리려고 gif 파일들을 보면서 분석을 해봤는데
왼쪽 방향키, 위쪽 방향키 를 반복적으로 누르는 경우
왼쪽을 누르면 위족방향을 보는 애니메이션의 잔상이,
위쪽 방향을 누르면 왼쪽 애니메이션의 잔상이 보입니다.
즉, PlayAt을 사용하여 다른 메시그룹의 애니메이션을 마지막 프레임에서 실행할 경우
(ex : PlayAt("다른애니메이션", 15);)
현재 진행 중이었던 애니메이션의 첫 프레임이 출력되고
다른 메시그룹의 애니메이션이 요청받은 프레임부터 정상적으로 출력되는 것으로 생각됩니다.
1 - 애니메이션 정상 실행 후 종료
2 - CurFrame으로 마지막 프레임을 받아옴
3 - 다른 메시 그룹의 애니메이션을 PlayAt으로 요청
4 - 현재 실행되던 애니메이션의 0프레임 출력
5 - 다른 메시 그룹의 마지막 프레임 애니메이션 정상 출력

이번에도 Gif에는 상당히 생략되어 있지만
실제로는 한 50프로 확률로 발동되는 것 같네요.
100프로 발동되는 것 도 아니고...
안녕하세요, RainyRizzle 팀입니다.
문의 주신 내용을 검토해보고 저희가 비슷한 상황을 테스트해보았습니다.
다만, 전체 스크립트를 알지 못한 상태에서 진행하였으므로, 결과나 원인이 다소 다를 수 있다는 점 양해 부탁드립니다.
Loop가 아닌 애니메이션만 있는 조건에서는, 즉 이 경우엔 "점프 애니메이션"만 있는 경우엔 애니메이션 프레임이 잘못 가져오거나 잘못 입력되는 경우는 없었습니다.
반면, Loop 애니메이션이나 다른 애니메이션, 즉 "점프가 아닌 애니메이션이 이어서 재생되는 경우"에서 문제가 발생했습니다.
저희의 경우엔 프레임을 공유할 수 있는 3개의 Loop가 아닌 애니메이션과 Idle 애니메이션 1개를 만들고, 항상 점프 이후엔 Idle 애니메이션이 실행되도록 PlayQueued() 함수를 이용하였습니다.
Idle 애니메이션이 실행되는 동안엔 문의주셨던 코드의 변수인 "jumpingAnimeData"가 null로 초기화되어야 하는데, 만약 그렇지 않는다면 잘못된 프레임을 가져올 수 있습니다.
저희는 위와 같이 코드를 작성했습니다.
특히, 붉은색 박스에 다음과 같은 코드를 추가로 작성하여 점프 애니메이션이 재생되지 않는 경우인데도 jumpingAnimeData 변수가 null이 아닌 경우엔 null로 초기화될 수 있도록 만들었습니다.
if ( jumpingAnimeData != null && jumpingAnimeData.PlaybackStatus != apAnimPlayData.AnimationPlaybackStatus.Playing )
{
jumpingAnimeData = null;
}
이렇게 하여 "점프 애니메이션 재생이 끝난 이후에도 jumpingAnimeData에서 프레임을 가져오는 경우"를 방지할 수 있었습니다.
PlayQueued를 이용한 저희의 테스트 도중엔 Idle 애니메이션이 잠시 나타나서 제보해주신 것과 유사하게 이상하게 보여진 경우도 있었습니다만,
디버그를 통하여 다른 애니메이션은 재생되지 않았음을 확인하셨다고 하셨으므로 이 경우엔 해당되지 않는 듯 합니다.
저희가 현재 정확하게 원인과 현상을 파악하지는 못했습니다.
위 내용을 확인해보시고 저희에게 추가적인 정보를 주신다면 다시 도움을 드리겠습니다.
감사합니다.
비슷한 상황까지 만들어 주시면서 실험해주셔서 감사합니다.
저도 작성하신 부분의 오류를 겪어봤기 때문에
점프 애니메이션이 끝난 경우
public void JumpEnd()
{
print("Jump End");