这篇博客介绍了当character角色处于flying状态并且速度为0时,游戏场景内的动态物体可以穿过角色的bug以及对应解决方案。
该bug在character处于swimming状态时一样会出现,其原理与解决方案都是类似的。
Bug重现
- 将character角色的
MovementMode
设定为MOVE_Flying
- 调用
StopMovementImmediately()
函数将其速度置为(0.f, 0.f, 0.f)
- 让场景中的动态物体向character角色运动,此时会发现物体将穿过角色
该bug已提交给Epic Games,对应issue为UE-35995
该bug官方预计在4.15版本进行修复,本博客提供的只是可行的workaround。
Bug分析
这个bug的玄机藏在UCharacterMovementComponent::PhysFlying(float deltaTime, int32 Iterations)
函数中。在该函数里有代码如下:
FVector OldLocation = UpdatedComponent->GetCo