새소식

개발/UE5

[UE5/Tip] 몽타주를 실행했으나, 애니메이션 인스턴스에서 한 프레임 늦게 수행되는 경우

  • -

문제 양상은 뭔가?

  • 클라이언트에서 무기 교체시 한 프레임씩 튐

네트워크 장애인가?

<클라>
[2025.02.13-06.18.44:110][641]LogTemp: Display: AItemEntity::OnCachedOnly(476) - Cache Item : EntityName[BowWeapon_01], Holder[BP_ALS_CharacterPlayer_Skyhunter_C_0], TimeStamp[24.195731]
[2025.02.13-06.18.44:110][641]LogTemp: Display: AItemEntity::OnCachedOnly(476) - Cache Item : EntityName[BowWeapon_01], Holder[BP_ALS_CharacterPlayer_Skyhunter_C_0], TimeStamp[24.195731]
[2025.02.13-06.18.44:488][664]LogTemp: Display: AItemEntity::OnCachedOnly(476) - Cache Item : EntityName[Throwable_JumpPad_SkyHunter], Holder[BP_ALS_CharacterPlayer_Skyhunter_C_0], TimeStamp[24.961440]
[2025.02.13-06.18.44:488][664]LogTemp: Display: AItemEntity::OnHoldInHand(396) - Hold Item : EntityName[BowWeapon_01], Holder[BP_ALS_CharacterPlayer_Skyhunter_C_0], SocketName[Bow], TimeStamp[24.961440]
[2025.02.13-06.18.44:492][664]LogTemp: Display: UGRCharacterAnimInstance_FP::OnHandHeldItemChanged(163) - FP AnimInstance Change HandHeldItem[BP_BowWeapon_01_C_0] bHeld[1]
[2025.02.13-06.18.44:492][664]LogStreaming: Display: FlushAsyncLoading(616): 1 QueuedPackages, 0 AsyncPackages
[2025.02.13-06.18.44:502][664]LogTemp: Display: UHandHeldComponent::PlayEquipAnimation(881) - PlayEquipAnim : EntityName[BP_BowWeapon_01_C_0]

  • Item[BP_BowWeapon_01_C_0] Visible[True]
  • Item[BP_Throwable_JumpPad_SkyHunter_C_0] Visible[False]

<서버>
[2025.02.13-06.19.25:452][439]LogTemp: Display: AItemEntity::OnCachedOnly(476) - Cache Item : EntityName[Throwable_JumpPad_SkyHunter], Holder[BP_ALS_CharacterPlayer_Skyhunter_C_0], TimeStamp[10.382906]
[2025.02.13-06.19.25:452][439]LogTemp: Display: AItemEntity::OnHoldInHand(396) - Hold Item : EntityName[BowWeapon_01], Holder[BP_ALS_CharacterPlayer_Skyhunter_C_0], SocketName[Bow], TimeStamp[10.382906]
[2025.02.13-06.19.25:454][439]LogTemp: Display: UGRCharacterAnimInstance_FP::OnHandHeldItemChanged(163) - FP AnimInstance Change HandHeldItem[BP_BowWeapon_01_C_0] bHeld[1]
[2025.02.13-06.19.25:454][439]LogTemp: Display: UHandHeldComponent::PlayEquipAnimation(881) - PlayEquipAnim : EntityName[BP_BowWeapon_01_C_0]

  • Item[BP_BowWeapon_01_C_0] Visible[True]
  • Item[BP_Throwable_JumpPad_SkyHunter_C_0] Visible[False]

로그 상 문제 없는 것으로 보임

몽타주를 중복 재생하는가?

  • 몽타주 재생쪽 확인해보니 문제 없음

비지블 문제인가?

  • 위 로그를 보면 알겠지만, 순차적으로 잘 적용하고 있음

무기 교체시 무기가 두개가 보이는가?

  • 두개가 한 프레임에 보임

왜 한 프레임이 밀릴까?

  • 원인이 될 수 있는 가능성이 뭐가 있을까
    • 플레이어 캐릭터
      • OnHandHeldItemChanged
      • Overlay 변동
        • Overlay의 리플리케이션을 제어해도 문제가 똑같이 지속됐음
    • 인벤토리
      • 혹시 무기 변경시 새로운 액터를 스폰해서 클라에서 보이는 건가?
        • 확인 결과 캐싱 되어있는 액터로 잘 전환하고 있음
    • 핸드핼드 컴포넌트
      • 같은 프레임 안에서 기존에 들고 있던 점프패드를 캐싱하고, 들어야 하는 활을 든 뒤, 애니메이션을 재생하는 동작이 서버와 동일하다.
        • 그나마 의심해볼만한건, 그 뒤에 추가적으로 불리는 점프패드에 대한 캐싱 두 개가 활에게도 영향을 주는가?
    • 아이템 객체
      • Visible 관련된 함수가 추가적으로 불리는지 확인
        • 아무것도 없었음
    • 애니메이션
      • 몽타주 동작 자체가 클라이언트에서 뭔가 다르게 동작할 소지가 있는가?
        • 애니메이션 틱 이후에 장착 애니메이션을 수행하는경우 가능성 있음
      • 몽타주가 재생된 이후에 혹시 무기 교체가 이뤄지는가?
        • 테스트 결과 애니메이션 교체 후 몽타주 재생됨
      • 애니메이션 링크 레이어 관련 문제이진 않은가?
        • 링크 레이어 갱신하는 쪽에 로그 박아서, 순서 확인 중
          • HandHeld -> Refresh -> AnimInstance 순으로 정상 궤도에 있는 것을 확인
    • 네트워크

해결

  • 무기 선택하는 로직이 타이머를 통해서 불림
  • 플레이어 캐릭터의 1인칭 매시의 틱 그룹이 PrePhysics에 해당
  • 이에 무기 선택하는 로직을 수행하는 GRInventoryComponent의 Tick에서 무기를 드는 로직을 수행 -> PrePhysics
  • 플레이어 캐릭터의 1인칭 매시 틱 그룹을 PostPhysics로 변경 -> 문제 해결
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.