Bullet Physicsライブラリをエンティティ/コンポーネントシステムに正常に統合しました。エンティティは互いに衝突する可能性があります。次に、有限で立方体のような地形と衝突できるようにする必要があります(InfiniMinerまたはそれのクローンMinecraftと考えてください)。昨日、Bullet Physicsライブラリを使い始めたばかりなので、何か明らかなことが足りないのかもしれません。
これまでのところRigidBody
、checkCollisionWith(CollisionObject co)
関数をオーバーライドするようにクラスを拡張しました。現時点では、他の形状を使用せずに、単なる原点のチェックです。後で繰り返します。現時点では、次のようになっています。
@Override
public boolean checkCollideWith(CollisionObject co) {
Transform t = new Transform();
co.getWorldTransform(t);
if(COLONY.SolidAtPoint(t.origin.x, t.origin.y,t.origin.z)){
return true;
}
return false;
}
これは、衝突がいつ発生したかを検出する限り、うまく機能します。ただし、これは衝突応答を処理しません。デフォルトの衝突応答は、衝突しているオブジェクトを他のシェイプ(おそらくAABB)の外側に移動するようです。
現時点では、地形の形状は世界と同じ大きさの箱にすぎません。つまり、地形と衝突するエンティティは、そのワールドサイズのボックスの外側に向かって発射されます。そのため、衝突応答を変更する必要があるか、地形の形状に直接適合する形状を作成する必要があることは明らかです。では、どのオプションが最適で、どのように実装するのですか?おそらく、私が考えていないオプションがあるのでしょうか?
地形は動的で、プレイヤーによって頻繁に変更されることに注意してください。