UE5) Server에서 AnimNotify가 제대로 Trigger되지 않는 경우

JellyPower·2023년 6월 14일
0

언리얼 메모장

목록 보기
2/4
post-thumbnail
  • 데디케이티드, 리슨 서버에서 AnimNotfy로 설정한 Trigger가 제대로 동작하지 않는 경우가 있다.
  • 이에 대한 이유는 서버에서의 애니메이션 설정이 다른것 + 언리얼 엔진 자체가 애니메이션을 제대로 평가하지 못한다는 환장의 콜라보이다.

언리얼 엔진에서 애니메이션의 업데이트

  • 서버에서, 사실 서버에서 뿐 아니라 애니메이션은 항상 업데이트 될 필요가 없다.
  • 실제로 애니메이션이 화면에 보이지도 않는데 매 순간 업데이트 해주면 낭비가 아니겠는가? 그렇기에 실제 애니메이션의 Tick을 돌리는 과정 자체와 각 Bone의 실제 Transform을 업데이트 하는 과정은 분리돼있다.
  • 이에 대한 정보를 담고있는것이 Skeletal Mesh Component 의 VisibilityBasedAnimTickOption이다.

  • Always Tick은 Animation의 Tick이 항상 돌아가는지 안돌아가는지를 의미하고 Refresh Bones는 실제로 각 Bone들의 Transform을 업데이트 할지에 대한 설정이다. 이를 통해 실제 틱이 도는것과 Bone의 업데이트를 분리하도록 설정할 수 있다.
  • 이를 통해 우리는 애니메이션의 업데이트와 애니메이션 업데이트 과정에서 일어나는 이벤트의 평가를 분리하여 최적화를 진행할 수 있다.
  • 그렇기에 서버에선 기본적으로 최적화를 위해 Always Tick Pose가 default로 항상 설정돼있다. (INI파일에서 default 설정값을 바꿀 수 있다곤 한다.)

게다가…

  • 조사해보니 Always Tick Pose로 해당 변수가 설정돼있으면 PostAnimEvaluation 라는 함수가 제대로 실행되지 않는다고 한다.

Issues About Anim Notify On Server

  • Evaluation이라 하면 실제 Bone에 대한 업데이트를 제외한 애니메이션 노티파이와 같은 평가가 진행될 거 같지만 실제 코드는 Refresh Bone이 진행돼야 Evaluation이 진행되도록 설정돼있다는 것이다.
  • 그렇기 때문에 서버에서 애니메이션을 실행하면 AnimNotfy의 실행이 항상 보장되는게 아니라는 것이다. (서버 랙으로 인해 애니메이션의 프레임을 건너뛴다던가, 화면에 해당 스켈레탈 메쉬가 출력되고있지 않는다던가 하면 AnimNotify 는 실행되지 않을수도 있다는 것이다.)

해결방법

  1. 위 링크에선 해당 문제를 해결하기 위해 실제 엔진의 Evaluation이 진행되는 엔진 코드의 위치 자체를 변경한 것으로 보인다.

  2. 아래 링크에선 Always Tick Pose and Refresh Bone으로 설정을 변경해서 항상 Evaluation이 진행되도록 하여 해결한다.

    Unreal4 - Dedicated Server에서 Animation시퀀스의 Notify 받는 방법

  3. 그리고 아래는 내가 해결한 방법이다.

  • 그것은 애니메이션 몽타주 에셋의, Montage Tick Type을 Branching Point로 변경해 주는 것이다.
  • 위 Montage Tick Type에는 Queued, Branching Point로 총 두 개의 type이 있다.
  • 그 중에서 Queued는, 애니메이션 노티파이의 실행이 End of Evaluation Phase에서 실행된다고 하고 Branching Point는 해당 프레임의 애니메이션 Tick을 맞딱뜨리자 마자 실행된다고 나온다.
  • 즉, 몽타주 업데이트를 Queued로 넣으면 Evaluation페이즈에서 지연된 상태로 Animnotfy가 실행되지만 Branching Point로 넣으면 지연되지 않고 해당 Tick에 진입하자 마자 바로 Trigger된다는 뜻이다. 그렇기에 해당 문제를 해결 가능하다.

잡담

  • 언리얼 멀티플레이 게임을 디버깅하며, Network Emulation Profile을 Bad로 설정하면 서버에서의 AnimNotify의 호출이 100%보장되지 않는 현상을 경험하며 애니메이션 설정에 대해 이것저것 알게 된 것 같다.
  • 애니메이션이랑 네트워크 설정이 이렇게 연관이 있다는 게 참 신기한 것 같다.
profile
게임엔진코드싸개(진)

0개의 댓글