PlayCanvasでの物理・衝突判定は、実際にはテレポートで移動しており、その中間のフレームをデルタタイムで割ったキーフレームとなっております。
ですので、collision同士のぶつかった面から奥行きまでの範囲が小さい(例:薄いコインと薄い板,メッシュ等が表面からぶつかるような)場合、予測先にcollisionが存在せずすり抜けてしまう事象が発生します。
こちらを回避する最も簡単な手段としては、collisionをもった透明なプリミティブentityを別オブジェクトとして対象に重ねて配置しておく方法です。余分に大きさを取ると物体のすり抜けは回避できるかと存じます。
また、予測分解能をあげて対応する方法もございます。こちらは処理速度に大きく影響しますが、余分なentityを配置する必要がございません。
以下のエンジン内部のスクリプトに記述がございます:
https://github.com/playcanvas/engine/blob/master/src/framework/components/rigid-body/system.js#L494
PlayCanvas上で修正する際は、以下のように記述します。
SomeScript.prototype.initialize = function () {
this.app.systems.rigidbody.fixedTimeStep = 1/120; // Normally this is 1/60
};
なお、このプロパティはPlayCanvasよりもAmmo.js に関連するため、ドキュメントには記載されていません。Ammo.js (Bullet)のシミュレーションのステッピングについては以下をご参照ください
http://www.bulletphysics.org/mediawiki-1.5.8/index.php/Stepping_The_World
コメント
0件のコメント
サインインしてコメントを残してください。