Table of Contents

コンストレイント

上級 プログラマー

制約は、剛体を特定の移動パターンに制限します。たとえば、実際の膝関節は 1 つの軸に沿ってのみ動き、前方には曲がりません。

制約は、2 つの剛体をリンクすること、または1 つの剛体をワールドの 1 点にリンクすることができます。剛体間の相互作用と依存関係を実現します。

制約の種類 は次の 6 つです。

  • ヒンジ
  • ギア
  • スライダー
  • コーン (ねじりと回転)
  • ポイント ツー ポイント (2 つのコライダー間の固定距離)
  • 6 自由度

さまざまな制約のデモを見るには、PhysicsSample サンプル プロジェクトをロードしてください。

制約を作成する

Note

現在、制約を使用できるのはスクリプトからだけです。

制約を作成するには、Simulation の静的メソッド CreateConstraint を使用します。

CreateConstraint(ConstraintTypes type, RigidbodyComponent rigidBodyA, Matrix frameA, bool useReferenceFrameA);

これは、RigidBodyA を現在の位置でワールドにリンクします。 ブール値 useReferenceFrameA は、制限が適用される座標系を指定します (RigidBodyA またはワールド)。

Note
CreateConstraint(ConstraintTypes type, RigidbodyComponent rigidBodyA, RigidbodyComponent rigidBodyB, Matrix frameA, Matrix frameB, bool useReferenceFrameA)

このメソッドは、RigidBodyARigidBodyB にリンクします。

Note
  • ConstraintTypes.Point2Point の場合、フレームは A または B のピボットを表します。平行移動ベクトルのみが考慮されます。useReferenceFrameA は無視されます。
  • ConstraintTypes.Hinge の場合、フレームは A/B のピボットと A/B の軸を表します。これは、この場合のヒンジでは、剛体とワールドの間に制限された角度の回転だけが許可されるためです。
  • ConstraintTypes.ConeTwist の場合は、useReferenceFrameA は無視されます。
  • ConstraintTypes.Gear の場合は、useReferenceFrameA は無視されます。フレームは A または B の軸だけを表します。平行移動ベクトル (軸を含む必要があります) だけが使用されます。

ブール値 useReferenceFrameA は、制限が適用される座標系 (RigidBodyA または RigidBodyB) を決定します。

制約をシミュレーションに追加する

制約を作成した後は、以下のメソッドを呼び出してスクリプトからシミュレーションに制約を追加します。

this.GetSimulation().AddConstraint(constraint);

または

var disableCollisionsBetweenLinkedBodies = true;
this.GetSimulation().AddConstraint(constraint, disableCollisionsBetweenLinkedBodies);

パラメーター disableCollisionsBetweenLinkedBodies は、 リンクされたボディが相互に衝突するのを停止します。

同様に、シミュレーションから制約を削除するには、次のメソッドを使用します。

this.GetSimulation().RemoveConstraint(constraint);

関連項目