このページでは

Qt Quick 3D物理シミュレーション:形状、物体、ジョイント

シミュレーション内のオブジェクトは、次の4種類のボディのいずれかで表現されます:StaticRigidBody 、DynamicRigidBody 、CharacterController 、およびTriggerBody 。ボディの物理的な形状は、CollisionShape のサブタイプによって表現されます。

形状

コリジョンシェイプは、物理シミュレーションの目的で、オブジェクトの物理的な形状と範囲を定義するために使用されます。コリジョンシェイプは通常、オブジェクトの視覚的な外観よりも単純な形状となります。

エンジンには、BoxShape 、CapsuleShape 、SphereShape 、PlaneShape といった、いくつかの定義済み形状が組み込まれています。これらの形状の処理は最適化されているため、これらを使用したシミュレーションは通常、より高いパフォーマンスを発揮します。

さらに、データによって定義されるカスタム形状もあります:ConvexMeshShape 、HeightFieldShape 、TriangleMeshShape 。これらを使用すると、パフォーマンスを多少犠牲にする代わりに、より柔軟な処理が可能になります。

ボディ

body は、シミュレーション内の物理的オブジェクトを表します。これらのボディは互いに相互作用し、衝突します。主なタイプは、静的ボディ(StaticRigidBody )と動的ボディ(DynamicRigidBody )の 2 つです。ボディの物理的な形状は、形状のリストによって指定されます。有効形状は、これらの形状の和集合となります。形状間の相対位置は固定されており、ボディは剛体です。

動的ボディ

動的ボディは移動することができます。isKinematic プロパティによって、その移動方法が決定されます。isKinematic がtrue の場合、kinematicPosition およびkinematicRotation プロパティを変更することで、ボディの位置を明示的に指定します。isKinematic がfalse の場合、オブジェクトはシミュレーションによって制御されます。つまり、重力によって落下したり、他のオブジェクトに跳ね返ったりします。

isKinematicがtrue の場合、すべての形状が許可されます。ただし、非キネマティックなボディにはより多くの制限があり、凸形状のみ使用可能です。 定義済みの形状には、BoxShape 、CapsuleShape 、SphereShape があり、カスタム形状にはConvexMeshShape があります。これは、非凸の物理ジオメトリが不可能であることを意味するものではありません。1つのボディに対して、複数の凸形状を組み合わせることができます。「複合形状の例」では、凸形状に基づいてリング状のボディを形成する方法を示しています。

静的ボディ

静的ボディは動きません。これらは、他のボディが移動する環境を表します。 なお、技術的には静的ボディを動かすことは可能ですが、物理シミュレーションの挙動は予期しないものになります。特に、静的ボディ上で静止状態に入った動的ボディは、その静的ボディが動いても「目覚め」ません。つまり、静的ボディが移動しても、動的ボディは同じ位置に留まり続けることになります。

キャラクターコントローラー

CharacterController タイプは特殊なケースです。これは、環境内を移動するキャラクターを表します。典型的な使用例として、camera がキャラクターコントローラーの子オブジェクトとなり、その移動がキーボード/マウスまたはゲームパッドによって制御される一人称視点(FPS)が挙げられます。

トリガーボディ

また、TriggerBody というタイプもあり、これも特殊なケースです。他のボディとは異なり、これは物理ボディではないため、他のボディとの衝突による相互作用は発生しません。その名前が示す通り、これは、他のボディが衝突形状によって定義されたそのボリューム内に入ったり出たりした際に、アクションをトリガーするためにのみ使用されます。 別のボディのsendTriggerReports がtrue に設定されており、その衝突ボリュームがTriggerBody に入った場合、bodyEntered シグナルが発信されます。

以下の表は、さまざまな種類のボディの概要、それらの相互作用、および使用方法についてまとめたものです:

ボディ相互作用許容される形状
StaticRigidBody移動しないすべての形状
DynamicRigidBody isKinematic を使用したものtrueプログラムによって配置されます。動的物体に影響を与えます。何にも阻まれることはありません。すべての形状
DynamicRigidBody isKinematic 対応falseシミュレーションによって完全に制御制限付き形状
CharacterControllerプログラムによって移動。動的物体に影響を与える。静的物体によって停止される。たった1つだけCapsuleShape
TriggerBodyなしすべての形状

物理マテリアル

PhysicsMaterial タイプは、オブジェクトが他のオブジェクトと衝突した際の挙動を指定します。dynamicFriction およびstaticFriction プロパティはオブジェクトの滑りやすさを決定し、restitution は跳ね返りやすさを決定します。

ジョイント

ジョイントは、2つのボディが互いにどのように動くかを制限します。ジョイントは、例えばドアの蝶番、ロープ、あるいは腕などをエミュレートするために使用できます。 さまざまなユースケースに対応するため、複数のジョイントタイプがサポートされています。詳細はDistanceJoint 、FixedJoint 、PrismaticJoint 、RevoluteJoint 、およびSphericalJoint を参照してください。すべてのジョイントはJoint QML タイプに基づいており、接続する 2 つのボディと、各ボディ上での位置を表す向きを持っています。各ジョイントタイプには、その固有の物理的制約を規定する異なるプロパティがあります。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.