トップダウン ゲームに Box2d を使用しています。「地面」は一連のタイルであり、各タイルはセンサー形状を持つ静的な物体です。オブジェクトが実際には地面と「衝突」していなくても、摩擦を有効にすることはできますか?
Box2d でこれができない場合は、現在オブジェクトを動かしている力を検出し、それに反対の力を適用することで、独自の実装を試みることを検討しましたが、その力を検出する方法がよくわかりません。
これを行う別の方法はlinearDamping
、あなたの体に設定することです。オブジェクトが置かれているタイルに応じて、これを異なる方法で設定できます。
摩擦は、他の力に関係なく、物体の速度に対して向けられます。
線形ダンピングの設定が十分でない場合、または b2Body のプロパティに依存することが不適切な場合は、非線形摩擦力を簡単に計算して、フレームごとに ApplyLinearImpulse() または ApplyLinearForce() を呼び出すことができます。
b2Body.GetLinearVelocity() で速度をクエリし、必要に応じて結果を (非線形に) スケーリングして力を取得し、両方のコンポーネントの符号を反転します。
本体を停止することに決めた場合 (固まるほど遅い場合)、SetLinearVelocity() は計算を行わずにそのトリックを実行します。
ApplyImpulse()
代わりにApplyForce()
はるかにうまく機能します。