【问题标题】:Scaling a sphere creates overlapping collisions缩放球体会产生重叠碰撞
【发布时间】:2017-03-13 18:16:23
【问题描述】:

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

问题:我有一个奇怪的行为,我的球会滚动,但有时会“跳”(或弹起来)。

原因似乎是球变大了,与地面重叠,造成了很大的碰撞。

我尝试使用偏移量更改它的位置(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);
        }

    }

【问题讨论】:

    标签: collision scaling overlap unreal-engine4


    【解决方案1】:

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

    此外,如果物理对游戏中的球很重要,请在 actor 属性中勾选 CCD 以实现更好的每帧碰撞检测。但是,这可能会变得昂贵,因此请确保您多次分析您的游戏。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多