私はPanda3dを通じて弾丸物理エンジンを使用しています。
私のシーンはまだ非常にシンプルです。「Wolfenstein3d」を考えてください。タイルベースで、壁は立方体です。
壁がプレイヤーをブロックすることを期待し、通常の発生率でない場合、プレイヤーは壁に沿ってスライドすることを期待します。
私が得るものは、私が期待するものですが、1つの違いがあります。壁に無理に入れようとすると、2つの位置の間でフレームがすばやく点滅します。これらは約0.04単位の距離で異なります。これは私のゲームでは4 cmに相当します。
私は他の場所で4 cmに気づきました。休憩しているとき、私のプレイヤーカプセルの底は地面の下4 cmです。
接触と衝突を区別するために、Bulletエンジンのどこかにデフォルトの0.04単位長の許容誤差があるということですか?もしそうなら、私は何をすべきですか?これらの0.04単位が0.4 cmに対応するようにゲームのスケールを変更して、ジッターを10倍小さくする必要がありますか?または、弾丸の許容値をより小さい値に変更するように要求できますか?
編集する
これは私が得るジッタです:6.155-6.118 = 0.036
LPoint3f(0, 6.11694, 0.835)
LPoint3f(0, 6.15499, 0.835)
LPoint3f(0, 6.11802, 0.835)
LPoint3f(0, 6.15545, 0.835)
LPoint3f(0, 6.11817, 0.835)
LPoint3f(0, 6.15726, 0.835)
LPoint3f(0, 6.11876, 0.835)
LPoint3f(0, 6.15911, 0.835)
LPoint3f(0, 6.11937, 0.835)
setMarginメソッドを見つけました。壁のBoxShapeとプレーヤーのCapsuleシェイプの両方で5 mmに設定しました。このログ(11.117-11.082 = 0.035)が示すように、それでも約35 mmジッターします。
LPoint3f(0, 11.0821, 0.905)
LPoint3f(0, 11.1169, 0.905)
LPoint3f(0, 11.082, 0.905)
LPoint3f(0, 11.117, 0.905)
LPoint3f(0, 11.082, 0.905)
LPoint3f(0, 11.117, 0.905)
LPoint3f(0, 11.0821, 0.905)
LPoint3f(0, 11.1175, 0.905)
LPoint3f(0, 11.0822, 0.905)
LPoint3f(0, 11.1178, 0.905)
LPoint3f(0, 11.0823, 0.905)
LPoint3f(0, 11.1183, 0.905)
カプセルのマージンは床への浸透を変更しましたが、私は少し高くなっています(0.835ではなく0.905)。しかし、壁と衝突しても何も変わりませんでした。
どうすれば壁との衝突のジッタを軽減できますか?
次の日の編集:
さらに調査した結果、動的オブジェクトは正常に動作しているようです。私の問題は、キャラクターの移動に使用するbtKinematicCharacterControllerに起因しています。インターネット全体によると、それらは完全にバグがあります。