2017-03-13 6 views
0

球(雪玉)であるポーン/アクターがあります。私が雪の上を転がると、成長します(私はそれをスケールし、質量を加えます)。球を拡大するとオーバーラップする衝突が発生する

問題:私は奇妙な振る舞いをしています。私のボールは転がりますが、時には「飛び跳ねる」(または飛び跳ねる)場合があります。

ボールが大きくなり地面と重なり、大きな衝突を引き起こしたようです。

は、私はそれがオフセット( 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

スケールを変更しないでください、半径を変更あなたが新しい半径を知っているので、あなたは行tracを行うことができますeをボールセンターから地面にまっすぐ下ろし、ライン距離と新しい半径の差だけボールを上(または下)に動かします。

また、物理的なボールがゲームで重要な場合は、アクターのプロパティでCCDをチェックし、フレームごとの衝突の検出を有効にします。しかし、これは高価になる可能性がありますので、あなたのゲームを何度もプロファイルしてください。

関連する問題