特定のベクトルをAddForceすると予期しない停止をする

以下の画像のように目標速度から現在速度を引いたベクトルをAddForceすると、アクタの現在速度が目標速度に到達した瞬間にアクタが停止します。

本来は現在速度が目標速度に到達した時点で、0ベクトルがAddForceされるだけなので、(摩擦も速度減衰も0に設定しているので)等速直線運動を続けるはずなのですが、何故か停止してしまいます。下に示したブループリント以外の処理は行っていません。

対象のアクタのコライダは

  • Simulate Physicsを有効
  • ConstraintsのLoock Rotationをすべて有効
  • Linear Damping、Angular Dampingを0に設定
  • Physic MaterialのFriction、Static Frictionを0に設定
    にしています。


これはバグなのでしょうか?
もしくは私は何かを間違えているのでしょうか?

「Enable Gravity」はfalseに設定しているでしょうか?等速直線運動というと、恐らく重力は無しの方が良いと思うのです。

またAddForceの結果の速度の場合、あるTickで99.5を取得したとすると次のTickイベントでは 101.1 を取得するとか、たとえば目標を100とすると一致しない可能性があります。

以下の丸で囲んだ出力ピンの結果が(0,0,0)になっていないかもしれないので、Print Stringで表示して確認してみてください

image

この場合、目標に達したらそもそもAdd Forceを実行しない方法が簡単かもしれません。


Velocityが500以下の場合だけAdd Forceを実行する例です。

Enable Gravityに関しては平面であれば理論上等速直線運動を続けるというだけで、それ自体が目的ではないのでtrueに設定しています。

Add Forceに入力しているベクトルの数値ですが、実際(0, 0, 0)にはなっておらず、大きさで言うとおよそ28のベクトルが入力されたあたりでアクタは停止していました。

そのため速度が目標速度以下の時のみAdd Forceするという方法は使えませんでした(目標速度に達していないため)。

なお、Unityで同じような処理を行ってみましたが、アクタが停止する現象は発生しませんでした。そのため、やはりAdd Forceノードのバグかと思われるのですが、この現象自体はそちらの環境でも再現はできたのでしょうか?

バグがあるとしてもAddForceそのものではなくて物理マテリアルの計算とかかもしれないです。AddForceは物理演算のパラメータの1つを変更するだけなので。

また、最初の投稿のイベントグラフを真似してみたのですが、ガクッと速度が落ちる現象自体は発生しませんでした。

static meshで変更した点はこれだけです。

image

あとは物理マテリアルでFrictionを0にしています。

例えばUnreal Engine 5の物理マテリアルの文書をWebブラウザで開くと「まだ5.0に向けた更新はしていない」と画面下に表示されたりするので、どうするとよいのか良く分からないですね。

一つ必要な設定を記述し忘れていました、申し訳ないです。

PhysicMaterialのFriction Combine ModeをMinかMultiplyにしないと摩擦が発生するのでアクタの速度が目標速度に近づかず、この現象は発生しません。

また、Enable Gravityを無効にし、空中に浮かせた状態で実行しても発生しました。この時、Physic Materialをデフォルト(None)にしても再現できました。

不可解な挙動ですね…

動作は再現できました。

その上でPhysical Materialの「Sleep Linear Velocity Threshold」を0にすると発生しなくなると思うのですが、いかがでしょうか?

image

5.0用に更新されていないリファレンスに載ってないので、バージョン5で増えた項目なのかもしれません

ありがとうございます、求めていた挙動が実現できましたので一応解決とさせていただきます。

Sleep Linear Velocity Thresholdという名からして速度が一定以下のときのアクタの速度に関与するパラメータだと思われるのですが、Add Forceに小さな値が入力されたときになぜかスリープしているということなのでしょうか…

なお、Sleep Linear Velocity Thresholdは1.0のままで、Add Force(Accel Change)と力学的に同じ処理をSet Physics Linear Velocityで実装したところアクタの停止する現象は発生しませんでした。

やはりAdd Forceに何らかの間違った処理が含まれている可能性が高いので、バグとして報告しようと思います。

4月15日にバグレポートを出していたのですが、なかなか返信が来ないため、既知の問題及び単純なミスである可能性を感じこちらで質問させて頂きました。(今となって考えれば、検証不足でのレポートでした。)
しかし4月20日に他の方が詳細なレポートを出していたようです。
この現象はバグであり、5.1で修正される予定です。

1 Like