为什么我的虚幻引擎物理资源表现得好像旋转了 90 度?

问题描述 投票:0回答:1

我正在编写一个自定义运动组件,并使用

SafeMoveUpdatedComponent
移动我在搅拌机中制作的自定义骨架网格物体。这是代码的主要部分:

const FVector PositionDelta = CalculatePositionDelta(DeltaTime);
const FRotator RotationDelta = CalculateRotationDelta(DeltaTime);

const FQuat NewRotation = UpdatedComponent->GetComponentQuat() * FQuat(RotationDelta);

FHitResult Hit(1.0f);
SafeMoveUpdatedComponent(PositionDelta, NewRotation, true, Hit);

if (Hit.IsValidBlockingHit())
{
    HandleImpact(Hit, DeltaTime, PositionDelta);
    SlideAlongSurface(PositionDelta, 1.0f - Hit.Time, Hit.Normal, Hit, true);
}
UpdateComponentVelocity();

碰撞的行为就好像网格体的物理资源旋转了 90 度,即使调试碰撞视图显示其方向正确,资源预览看起来也不错。当我将它再旋转 90 度时,它就可以正常工作,但显然有些不对劲。

您可以在此处看到它穿过一个盒子:

No rotation

这是当我将物理资源的主要部分旋转 90 度时它是如何碰撞的。

90 degree rotation

当我将此网格体与 Floating Pawn Movement 组件一起使用时,也会出现同样的问题。

编辑:我已经设法确定问题的根源 - 我的骨架网格物体的根骨骼应用了 90 度旋转。让这个问题悬而未决,因为根本问题仍然没有解决 - 如果根骨骼旋转应用于骨架网格物体,为什么它不应用于物理资产?

c++ game-physics unreal-engine4 unreal-engine5
1个回答
0
投票

首先计算动画(姿势),然后物理对其应用单独的变换。

骨骼是物理引擎模型的手柄,但它不是双向的。 物理可以移动模型,但模型无法计算物理或影响引擎。

这与角色以 T 字姿势移动、将四肢戳穿墙壁的错误有关。

物理引擎会使用给定的任何内容,即使存在动画错误。

© www.soinside.com 2019 - 2024. All rights reserved.