缩放球体会产生重叠碰撞

时间:2017-03-13 18:16:23

标签: collision scaling overlap unreal-engine4

我有一个球体(雪球)的棋子/演员。当我在雪上滚动时,它会增长(我会扩大它并增加质量)。

问题:我有一个奇怪的行为,我的球滚动,但有时"跳跃" (或反弹)。

原因似乎是球变得更大并且与地面重叠,导致大碰撞。

我试图用偏移量(Ball->SetAllPhysicsPosition(Ball->RelativeLocation + FVector(0, 0, newRadius-pastRadius);来改变它的位置,但我仍然遇到同样的问题。(它"工作"具有大的硬编码偏移,但不是任何尺寸)。

您是否知道如何解决此问题?

这是我用来使球变得更大的代码。我加上扭矩来移动它。

void ASnowballBall::NotifyHit(...)
{
    float resizeValue = 0.0f;

    //If the snowball collides with snow, it grows
    if (Other->GetName().StartsWith("Snow", ESearchCase::IgnoreCase) && Ball->BodyInstance.GetUnrealWorldVelocity().Size() > 50.0f)
    {
        // Max size based on mass
        if (Ball->GetMass() < 10000.0f){
            resizeValue = (20.0f / Ball->GetMass()));
            resizeValue = FMath::Clamp(resizeValue, 0.0f, 0.003f);

            Ball->SetRelativeScale3D(Ball->RelativeScale3D + resizeValue);
            Ball->SetMassScale("None", Ball->BodyInstance.MassScale);
        }

    }

1 个答案:

答案 0 :(得分:1)

不要改变比例,改变半径。然后,因为你知道新的半径,你可以直接从球心到地面进行直线追踪,并将球向上(或向下)移动线距和新半径之间的差值。

此外,如果物理对于游戏中的球很重要,请在actor属性中选中CCD,以便每帧更好地进行碰撞检测。然而,这可能会变得昂贵,因此请确保您多次描述您的游戏。