リジッドボディ / Rigidbody

物理挙動をオブジェクトに与えるためには、Rigidbody を追加するだけです。このようにすると、オブジェクトには重力が作用することになり、その世界の中で他のオブジェクトと衝突できます。

Mass オブジェクトの質量 (単位 : kg)。 質量は、他のリジッドボディのおよそ 100 倍 以上にすべきではありません。
2 つのリジッドボディの相対的な「Mass」は、リジッドボディが互いに衝突する際に、どのように反応するかを決定します。
1 つのリジッドボディの「Mass」を他方より大きくしても、自由落下での落下速度は上がりません。 これを行うには、「Drag」を使用します。
Drag 力により動く際に、オブジェクトに影響する空気抵抗の量。 0 の場合、空気抵抗が 0 で、無限の場合、オブジェクトは直ちに動きを止めます。
「Drag」値が低いと、オブジェクトが重く見えるようになります。 この値が高いと、軽く見えます。 「Drag」の通常の値は、.001 (金属の塊) と 10 (羽) の間です。
Angular Drag トルクにより回転する際に、オブジェクトに影響する空気抵抗の量。 0 の場合、空気抵抗なし。
このパラメータの値を無限 (infinity) に設定するだけでは、オブジェクトの回転を直ちにを止められないことに留意して下さい。
Use Gravity 有効にすると、オブジェクトは重力の影響を受けます。
Is Kinematic 有効にすると、オブジェクトは物理特性エンジンによって駆動されませんが、その Transform によってのみ操作できます。
これは、プラットフォームを移したい場合や、HingeJoint を追加したリジッドボディをアニメート化したい場合に便利です。
オブジェクトのトランスフォーム コンポーネントを直接操作しているが、物理特性が必要な場合、リジッドボディを追加し、キネマティックにします。
Interpolate Rigidbody の動きがぎこちないとき、次のオプションを試して下さい。
  None:補間を適用しない。
  Interpolate:前フレームの Transform にもとづいて Transform のスムージング。
  Extrapolate次フレームの Transform 予測にもとづいて Transform のスムージング。
Collision Detection 高速で動くオブジェクトが、衝突を検知せずにすり抜けることを防止するために使用します。
  Discrete:シーンの全 Collider に対してDiscrete (不連続) な衝突検知を行ないます(デフォルト)。
  Continuous:動的な コライダ (リジッドボディあり) にはDiscrete (不連続) な 衝突、静的なメッシュコライダ (リジッドボディなし) には Continuous (連続)な衝突を適用します。
Continuous Dynamic を適用した リジッドボディ に対する衝突は、Continuous な衝突検知をします。これはContinuous Dynamic を適用したオブジェクトの衝突相手として使用します。
(物理演算のパフォーマンスに大きく影響するため、高速なオブジェクトの衝突で問題が出ない場合はDiscrete のままにして下さい。)
  Continuous Dynamic:Continuous および Continuous Dynamic 衝突を適用したオブジェクトに対して、Continuous な衝突検知を行ないます。
静的なメッシュコライダ (リジッドボディ なし) にも Continuous な 衝突 を適用します。その他の コライダ については Discrete な衝突検知を行なう。高速で動くオブジェクトに使用します。
Constraints リジッドボディの動きに関する制限:-
  Freeze Position:ワールド座標系の X、Y、Z 軸で移動するリジッドボディを選択的に停止します。
  Freeze Rotation:ワールド座標系の X、Y、Z 軸で回転するリジッドボディを選択的に停止します。

※ トランスフォーム コンポーネントを通じて、GameObject を移動させている場合でも、衝突/トリガー メッセージを受信したい場合は、リジッドボディを移動しているオブジェクトに追加する必要があります。

※Mesh Collider同士は通常では衝突しませんが、Convexをオンにした場合のみ衝突することが出来ます。良くある方法として、動く全てのオブジェクトにはプリミティブなコライダを組み合わせ、動かない背景のオブジェクトにMesh Colliderを使います。

連続衝突検知 / Continuous Collision Detection

連続衝突検知は、高速移動するコライダが互いにすり抜けないようにする機能です。 これは、通常の(「Discrete」) 衝突検知使用時、オブジェクトが 1 つのフレームでコライダの片側にあり、次のフレームでコライダを通過している場合に発生することがあります。 これを解決するには、高速移動するオブジェクトのリジッドボディで連続衝突検知を有効にできます。 衝突検知モードを「Continuous」に切り替え、リジッドボディがスタティックな (つまり、非リジッドボディ) メッシュコライダ を通過させないようにします。 衝突検知モードを「Continuous Dynamic」に切り替え、リジッドボディが、衝突検知モードを「Continuous」または「Continuous Dynamic」に設定したその他のサポートされているリジッドボディを通過させないようにします。 連続衝突検知は、Box、Sphere および Capsule の コライダ でサポートされています。連続衝突検知は、オブジェクトですり抜けが発生してしまう場合に衝突をキャッチするためのセーフティネットが意図する用途ですが、物理的に正確な衝突結果が得られるわけではないため、高速に動くオブジェクトで問題がある場合は、TimeMangerインスペクタにある固定 Time step 変数を減らしてシミュレーションをより厳密に行うことが出来ます。

正しいサイズの使用

GameObject のメッシュのサイズは、リジッドボディの質量よりもはるかに重要です。 リジッドボディが期待通りに動作しなていない場合、ゆっくり移動するか、浮くか、正しく衝突しません。 Unity のデフォルトの単位スケールは、1 単位 = 1 メートルなので、インポートされたメッシュのスケールは維持され、物理特性計算に適用されます。 例えば、倒壊しかけている高層ビルは、積み木で作った塔とはかなり違う形で崩れるため、正確にスケールするには、サイズの異なるオブジェクトをモデル化する必要があります。

メッシュ自体を調整できない場合、Project View で選択し、メニューバーから Assets->Import Settings... を選択することで、特定のメッシュ アセットの均一なスケールを変更できます。 ここでは、スケールを変更し、メッシュを再インポートできます。

ゲームで、GameObject を異なるスケールでインスタンス化する必要がある場合、トランスフォームのスケール軸の値を調整しても大丈夫です。 欠点は、物理特性シミュレーションは、オブジェクトのインスタンス化時に更に多くの作業を剃る必要があり、ゲーム内でパフォーマンスの低下を引き起こす可能性があります。 これは大きな損失ではありませんが、他の 2 つのオプションでスケールを仕上げることほど効率的ではありません。 不均一なスケールだと、パレンディング使用時に望まぬ動作を生じる場合があります。 このため、モデリング アプリケーションで正しいスケールでオブジェクトを作成するのが常に最適です。

Rigidbody は物理シミュレーションを与えられたオブジェクトです。RigidbodyはPlayerが押して動かすことの出来るもの、例えば壷や固定されてないもの、などに使用することが出来るほか、直接スクリプティングによってRigidibodyに力を加えて(Add Forceして)、動かすことが出来ます。

もしKinematicでないRigidbodyのTransformを直接移動すると、他のオブジェクトと正しく衝突しないかもしれません。その代わりに、Rigidbodyを動かすには、力を加えるか、トルクを加える必要があります。さらにRigidbodyにJoint を加えて複雑な動作も実現することが出来ます。例えば、物理的なドアか、振り子の動作をする鎖のついたクレーンを作成することが出来ます。

さらにはRigidbodyを使用して乗り物に活力を与えて、Rigidbody、四輪のWheel Collider とユーザのInput にもとづいたWheel Forceを加えるスクリプト、などを作成することが出来ます。

スクリプトからRigidbodyを加えることで飛行機を作成することが出来ます。あるいは、様々なJointを追加したり、スクリプトから力を加えることで、特殊な乗り物やロボットを作成することが出来ます。

RigidbodyはPrimitive Collider と組み合わせて使用することが良くあります。

ヒント:

  • 親子のRigidbodyを一緒にするべきではありません。
  • RigidbodyのScaleをするべきではありません。

Kinematic Rigidbodiy

Kinematic Rigidbody はisKinematicオプションを有効にしたRigidbodyです。Kinematic Rigidbodyは力、重力、コリジョンによる作用を受けません。これらは、明示的にTransformの位置や回転を設定したり、アニメーションできますが、他のKinematic Rigidbodyを相互作用させることが出来ます。Kinematic Rigidbodyは他のRigidbodyと衝突した際にWake Up して、上に乗せられたRigidbodyに摩擦(Friction)を加えます。

次に、Kinematic Rigidbodyの例をいくつか示します:

  1. オブジェクトに物理挙動を持たせるけれど、別の状況ではアニメーションやスクリプトで制御を明示したい場合がたまにあります。例えばアニメーションするキャラクターを作成して、そのボーンにRigidbodyをアタッチして、ジョイントを接続してRagdollとして使用するとします。ほとんどの場合、キャラクターはアニメーションで制御するので、RigidbodyをKinematicに設定します。しかし、キャラクターが何かに当てられたときはRagdollに変更して、物理挙動を与えるようにします。そのためには、isKinematicプロパティを無効にするだけです。
  2. 動いているオブジェクトに他のオブジェクトを押すことが出来るようにしたいけど、逆にそれ自身は押されたくない場合がたまにあります。例えば、アニメの土台があり、いくつかのRigidbodyの箱を上に乗せたい場合、土台はRigidbodyのないCollider ではなく、Kinematic Rigidbodyとすべきです。
  3. Kinematic Rigidbodyにアニメーションを持たせ、本当のRigidbodyに利用可能なジョイントをつけてKinematic Rigidbodyをフォローさせるようにしたい場合があります。

Static Collider

Static Collider はコライダはあるけれどRigidbodyはないゲームオブジェクトです。Static Colliderは同じ場所を保ち不動である階段の物体などで使用されます。すでに存在するグラフィックスのメッシュにMesh Collider を追加(あるいはもっと良い方法としてImport Settings のGenerate Colliders のチェックボックスを有効化)するか、他のコライダのタイプを使用することが出来ます。

物理挙動により影響される (Kinematic でない) コライダは有効化/無効化あるいは変換すべきではありません。Static Colliderの変更はPhysXでの内部計算のやり直しを発生させ、それが高価であるために大きなパフォーマンス低下につながります。ひどい場合にはコライダが仕様が未定義の状態になり、物理計算に不具合を生じさせるかもしれません(例えば変更された Static Collider に対する Raycast によりそれを検知できなかったり、逆に空間上のランダムな地点で検知してしまったりします)。さらにStatic Collider にもとづいて他の Rigidbody をウェイクアップさせる動作は仕様が未定義であり、Static Collider を移動することでそれにタッチした Rigidbody に摩擦が加わりません。これらの理由のため、 Rigidbody であるコライダのみ変更対象とすべきであり、 isKinmatic は true をセットして他のコライダが物理挙動により影響を受けないようにすべきです。

Character Controller

ヒューマノイド型キャラクター作成する場合、Character Controller を使用すべきです。これはアクションゲーム(Third Person Platformer)のメインキャラかもしれないし、FPSの狙撃手や敵キャラかもしれません。

このControllerは不自然な動きになってしまうため、物理法則にしたがいません(Doomでは時速140キロで走って、1フレームで停止して、方向転換することが出来ます)。その代わり、移動するコライダは衝突判定を行って、キャラクターが壁に沿ってスライドして、階段を昇ったり降りたり出来るようになります。

Character ControllerはForceにより作用を受けませんが、Rigidboyにスクリプトから力を加えることで押すことは出来ます。一般に、全てのヒューマノイドキャラクターはCharacter Controllerを使用して実装します。

Character Controllerは物理挙動が継承されないため、もし本当の物理挙動を当てはめたい場合、例えば揺れるロープにつかまったり、大きな岩に押しのけられたり、といった場合、Rigidbodyを使用する必要があります。これにより、キャラクターにJointやForceを使用することが出来ます。Character Controllerは常にY軸と平行の向きであるため、空中で向きを変える必要がある場合(例えば重力が変化する、など)もRigidbodyを使用する必要があります。しかし、キャラクターを不自然でないようにRigidbodyをチューニングするのは、ゲームキャラクターが物理法則に反して動くことを期待されているため難しい、ということを頭に入れるべきです。もう一つの違いは、Character Controllerが決まった階段のステップをスムーズに動くことは出来ますが、Rigidbodyには難しいことです。

もし、Character ControllerをRigidbodyの親とする場合、"Joint" のような動作になります。

 コライダ / Collider

コライダはRigidbody(剛体)と連動してUnity上での物理挙動を実現します。Rigidbodyというのは「オブジェクトを物理法則にしたがって動かす」一方で、コライダはオブジェクトが互いに衝突することを可能に」します。

Is Trigger オンにすると、コライダはイベントのトリガーとなり、物理エンジンが無視されます
Material 使用する「 物理特性マテリアル / Physics Material 」 への参照。物理マテリアルによりコライダが他と衝突したときの物理挙動の条件が定義されます。
Mesh 衝突判定に使用するメッシュ(への参照)。
Smooth Sphere Collisions オンのとき、衝突メッシュの法線を滑らかにする。球が滑らかな表面(例 ある地形上を滑らかに移動させるため、地形のエッジを立てずにを転がす。)の上を転がす場合、有効にすべきです。
Convex オンにした場合、MeshColliderは他のMeshColliderと衝突します。ConvexオンのMeshColliderは三角形面数の上限255に制限されています。
コライダをトリガーとしてマーキングする別の方法としてインスペクタでIsTrigger属性をチェックボックスにてオンするという方法があります。これによりトリガーは物理エンジンから無視されるようになり、コライダの衝突が発生した場合3種類の トリガー メッセージが 発行されます。トリガーはゲームにおける別イベントを発動するに際して便利です(カットシーンやドアの自動開閉、チュートリアルメッセージの表示、等々。想像を働かせれば様々なパターンで応用できます)

留意しないといけないこととして、二つのトリガーがトリガーイベント衝突時にを発行するためには、片方のトリガーはリジッドボディを含む必要があります。同様にトリガーが通常のコライダと衝突するためには片方のトリガーがリジッドボディを含む必要があります。全てのコライダ種類の一覧についていは図表にまとめてありますので、本項の「応用」セクションの「衝突アクションマトリクス」を参照下さい。

摩擦係数と反射係数

摩擦係数(friction)、反射係数(bouncyness)、やわらかさ(softness)は 物理マテリアル の属性として定義されています。スタンダードアセット のなかに頻繁に使用される物理マテリアルが含まれています。使用する際はPhysic Materialドロップダウンボックスをクリックし、どれかを選択します(例 Ice)。物理マテリアル については自分でカスタムのものを作成することができ、摩擦係数などすべて調整することが出来ます。

複合コライダ

複合コライダはプリミティブなコライダの組み合わせによりひとつのコライダとしての挙動を示すものです。便利な場面としては複雑なメッシュをコライダでしようしたいが、Mesh Colliderを使用できないケースです。複合コライダを作成する際はコライダオブジェクトの子オブジェクトを作成し、それから各々の子オブジェクトにプリミティブなコライダを追加します。これにより各々のコライダを別々に容易に配置、回転、拡大縮小することが出来ます。

Mesh Collider同士は通常では衝突しませんが、Convexをオンにした場合のみ衝突することが出来ます。良くある方法として、動く全てのオブジェクトにはプリミティブなコライダを組み合わせ、動かない背景のオブジェクトにMesh Colliderを使います。

ヒント

  • 複数のコライダをオブジェクトに追加するためには、子ゲームオブジェクトを作成し、コライダを各々にアタッチします。この方法でコライダは独立して動作させることが出来ます。
  • シーンビューのギズモをみることでオブジェクトとコライダの大きさを確かめることができます
  • コライダはオブジェクトと大きさを出来るかぎりマッチさせるのが良いです。均等でない大きさ(各々の軸方向での大きさが異なる)の場合、メッシュコライダでないかぎりオブジェクトと完全にマッチさせることは出来ません
  • トランスフォームコンポーネントを通してオブジェクトを移動させつつ、衝突、トリガーのメッセージを受け取るためには動いているオブジェクトにRigidbodyをアタッチする必要があります。

コライダの組み合わせ

Unity上で複数の異なる衝突の組み合わせがありえる。それぞれのゲームで追求する内容は異なるので、ゲームのタイプによって組み合わせの良し悪しが決まってくる。ゲームで物理挙動を使用している場合、基本的なコライダの種類を理解し、主な働き、使用例、他のオブジェクトとの相互作用について理解を深める必要がある。

スタティックコライダ

リジッドボディを含まないが、コライダを含むゲームオブジェクトについて考えます。これらのオブジェクトは動かない、あるいは動くとしてもわずかであることが望ましいです。これらは背景のオブジェクトとして最適である。リジッドボディと衝突したとしても動きません。

リジッドボディコライダ

リジッドボディとコライダ双方を含むゲームオブジェクトについて考えます。これらのオブジェクトは物理エンジンに影響を受け、加えられた力や衝突によって軌道が変化します。またコライダを含むゲームオブジェクトと衝突させることが出来ます。多くの場合は物理エンジンを使用したい場合の主要なコライダとなります。

キネマティック リジッドボディコライダ

IsKinematicがオンとなっているリジッドボディとコライダ双方を含みゲームオブジェクトについて考えます。このオブジェクトを動かすためには力を加えるのではなくトランスフォーム コンポーネントの値を書き換えて移動させます。スタティックコライダを共通点が多いがコライダを頻繁に動かしたい場合に役立ちます。その他、このオブジェクトを使用するのが適切なシナリオはいくつか考えられます。

このオブジェクトはスタティックコライダにトリガーイベントを発行したい場合に役立つ。トリガーはリジッドボディを含む必要があるためリジッドボディをアタッチしたうえでIsKinematicをオンに設定する。これによりオブジェクトが物理挙動の影響を受けず、必要なときにトリガーイベントを受け取ることが出来るようになる。

キネマティック リジッドボディは簡単にオンオフを切り替えることが出来る。これはラグドール作成に大いに役立ち、たとえばキャクラターがある場面まではアニメーションどおりに動作し、その後に衝突によって爆発や何らかのエフェクトを起こしその後はラグドールの動作をさせたい場合に役立つ。

リジッドボディを長時間動かさない場合、完全にスリープ状態とさせることができる。言い換えると物理挙動のアップデート処理のなかで値が更新されることはなく、位置もそのままとなる。キネマティックリジッドボディコライダを通常のリジッドボディコライダの外に移動する場合、スリープ状態は解除され物理挙動のアップデート処理が再び始まる。つまり動かしたいスタティックコライダが複数あり、その上に異なるオブジェクトを落としたい場合にはキネマティック リジッドボディコライダを使用すべきである。

衝突アクションマトリクス

衝突する2つのオブジェクトの設定によっては同時に複数のアクションが走る可能性がある。以下のチャートにより二つのオブジェクトが衝突する際の動作をアタッチされているコンポーネント等を基準に整理しました。いくつかの組み合わせにおいては片方のオブジェクトのみ衝突の影響を受けるので、原則として「オブジェクトにリジッドボディがなければ物理挙動もない」ということをよく頭に入れておく必要がある。

 
衝突により衝突メッセージを受け取るか?
  Static Collider Rigidbody Collider Kinematic
Rigidbody Collider
Static
Trigger Collider
Rigidbody
Trigger Collider
Kinematic Rigidbody
Trigger Collider
Static Collider   Y        
Rigidbody Collider Y Y Y      
Kinematic Rigidbody Collider   Y        
Static Trigger Collider            
Rigidbody Trigger Collider            
Kinematic Rigidbody Trigger Collider            
 
衝突によりトリガーメッセージは発行されるか?
  Static Collider Rigidbody Collider Kinematic
Rigidbody Collider
Static
Trigger Collider
Rigidbody
Trigger Collider
Kinematic Rigidbody
Trigger Collider
Static Collider         Y Y
Rigidbody Collider       Y Y Y
Kinematic Rigidbody Collider       Y Y Y
Static Trigger Collider   Y Y   Y Y
Rigidbody Trigger Collider Y Y Y Y Y Y
Kinematic Rigidbody Trigger Collider Y Y Y Y Y Y

 

 物理特性マテリアル / Physics Material

Dynamic Friction すでに移動中の場合に使用される摩擦。 通常は、0 から 1 の間の値を使用します。
0 の場合、氷のような感じになります。1 の場合、多くの力または重力がオブジェクトを押さない限り、非常に素早く停止します。
Static Friction オブジェクトが面上で静止したままの場合に使用される摩擦。 通常は、0 から 1 の間の値を使用します。
0 の場合、氷のような感じになります。1 の場合、オブジェクトをかなり強く動かそうとします。
Bounciness 面の跳ね返し度合い。 0 の場合、跳ね返りません。 1 の場合はエネルギー損失なしで跳ね返ります。
Friction Combine Mode 2 つの衝突するオブジェクトの摩擦がどのように結合されるか。
  Average:2 つの摩擦値が平均化されます。
  Min:2 つの摩擦値の内最小の値が使用されます。
  Max:2 つの摩擦値の内最大の値が使用されます。
  Multiply:2 つの摩擦値が互いに乗算されます。
Bounce Combine 2 つの衝突するオブジェクトの跳ね返し度合いがどのように結合されるか。
上のFriction Combine Mode と同じです。
Friction Direction 2 異方性の方向。 この方向が 0 でない場合、異方性摩擦が有効になります。 Dynamic Friction 2 と Static Friction 2 Friction Direction 2に沿って適用されます。
Dynamic Friction 2 異方性摩擦を有効にすると、DynamicFriction2 が、Friction Direction 2 に沿って適用されます。
Static Friction 2 異方性摩擦を有効にすると、StaticFriction2 が、Friction Direction 2 に沿って適用されます。

Constant Force (一定力) / Constant Force

Constant Force は、Rigidbody に一定力を素早く加えるためのユーティリティです。 これは、初速を大きくせずに、加速を重視する場合、例えばロケットのようなワンショットのオブジェクトに最適です。

 

一定の力で前進するロケット
Force ワールド空間で適用される力のベクトル。
Relative Force オブジェクトのローカル空間で適用される力のベクトル。
Torque ワールド空間で適用されるトルクのベクトル。 オブジェクトが、このベクトル周辺で回転し始めます。 ベクトルが長いほど、回転が速くなります。
Relative Torque ローカル空間で適用されるトルクのベクトル。 オブジェクトが、このベクトル周辺で回転し始めます。 ベクトルが長いほど、回転が速くなります。

加速しながら前進するロケットを作成するには、Relative Forceを正の Z 軸に沿って設定します。 次に、 Rigidbod yのDragプロパティを使用して、一定の最大速度を超えないようにします (ドラッグが高くなるほど、最大速度が下がります)。 Rigidbody で、ロケットが常に軌道上にあるよう、重力をオフにします。

  • オブジェクトを上に流すには、正の Y 値のあるForceプロパティを持つ一定力を追加します。
  • オブジェクトを上に飛ばすには、正の Z 値のあるRelative Forceプロパティを持つ一定力を追加します

 

ヒンジ ジョイント / Hinge Joint

Hinge Joint は、2 つの Rigidbodies をグループ化し、互いにヒンジで連結されているかのように動くよう制約します。 ドアに最適ですが、鎖や振り子などをモデル化するのにも使用できます。

 
Connected Body ジョイントが依存するリジッドボディへのオプションの参照。 設定しないと、ジョイントはワールドに接続します。
Anchor ボディが揺れる中心となる軸の位置。 この位置はローカルなスペースで定義されます。
Axis ボディが揺れる中心となる軸の方向。 この方向はローカルなスペースで定義されます。
Use Spring スプリングは、リジッドボディをその連結されたボディと比較して、一定の角度に到達させます。
Spring Use Springを有効にした場合に使用されるスプリングのプロパティ。
Spring オブジェクトが前述の位置に移動するのに出す力。
Damper この値が高いほど、オブジェクトの速度は低下します。
Target Position スプリングの対象角度。 スプリングは、°で測定されたこの角度に向けて引っ張られます。
Use Motor モーターはオブジェクトを回転させます。
Motor Use Motorを有効にした場合に使用されるモーターのプロパティ。
Target Velocity オブジェクトが達成しようとする速度。
Force オブジェクトが前述の速度を達成するのに適用される力。
Free Spin 有効にすると、モーターは回転にブレーキをかけるのに使用されず、加速にのみ使用されます。
Use Limits 有効にすると、MinMax値内にヒンジの角度が制限されます。
Limits Use Limitsを有効にした場合に使用される制限のプロパティ。
Min 回転が到達できる最低角度。
Max 回転が到達できる最高角度。
Min Bounce 最小の停止に到達した際にオブジェクトが跳ね返る量。
Max Bounce 最大の停止に到達した際にオブジェクトが跳ね返る量。
Break Force このジョイントが分解するのに適用される必要のある力。
Break Torque このジョイントが分解するのに適用される必要のあるトルク。

1 つのヒンジを GameObject に適用する必要があります。 このヒンジは、Anchorプロパティで指定した点で回転し、指定したAxisプロパティ周辺で移動します。 ジョイントのConnected BodyプロパティにGameObject を割り当てる必要はありません。 ジョイントの Transform を追加したオブジェクトのトランスフォームに依存させたい場合にのみ、GameObject をConnected Bodyプロパティに割り当てる必要があります。

ドアのヒンジがどのように機能するかを考えましょう。 この場合のAxisは上で、Y 軸に沿って正になります。 Anchorは、ドアと壁の間の交差部のどこかに置かれます。 ジョイントは、デフォルトでワールドに連結されるので、壁をConnected Bodyに割当てる必要はありません。

次は、ドギー ドアのヒンジについて考えましょう。 ドギー ドアのAxisは横で、相対的な X 軸に沿って正になります。 メイン ドアをConnected Bodyに割当てる必要があるため、ドギー ドアのヒンジは、メイン ドアのリジッドボディに依存します。

複数のヒンジ ジョイントを連結して、鎖を作成することも出来ます。 鎖の各連結部分にジョイントを追加して、次の連結部をConnected Bodyとして追加します。

Connected Bodyが機能するよう、ジョイントに割り当てる必要はありません。

動的なダメージ システムを作成するには、Break Forceを使用します。 プレイヤーが、ロケット ランチャーで爆破する、あるいは車で突っ込んで、ドアとヒンジを切り離すことができるので非常に便利です。

Spring、MotorおよびLimitsプロパティにより、ジョイントの動作を微調整できます。

スプリング ジョイント / Spring Joint

Spring Joint は、2 つの Rigidbody をグループ化し、スプリングで連結されているかのように動くよう制約します。

 
Connected Body ジョイントが依存する剛体へのオプションのオプションの参照。
Anchor ジョイントの中心を定義するオブジェクトのローカル空間での位置 (静止時)。 これは、オブジェクトがびょうがされる先の点ではありません。
X X 軸に沿ったジョイントのローカル点の位置。
Y Y 軸に沿ったジョイントのローカル点の位置。
Z Z 軸に沿ったジョイントのローカル点の位置。
Spring スプリングの強さ。
Damper 有効な場合にスプリングを減らす量。
Min Distance この距離を超えると、スプリングが起動しません。
Max Distance この距離を未満の場合、スプリングが起動しません。
Break Force このジョイントが分解するのに適用される必要のある力。
Break Torque このジョイントが分解するのに適用される必要のあるトルク。

スプリング ジョイントにより、剛体 GameObject は特定の目標:位置に引っ張られます。 この位置は、別のリジッド ボディの GameObject か世界のいずれかになります。 GameObject がこの目標位置から更に離れると、スプリング ジョイントがその元の目標''位置に引き戻す力を加えます。 これにより、ボムバンドやパチンコに非常に似た効果を作成できます。

スプリングの目標位置は、スプリング ジョイントを作成するか、再生モードに入った時に、AnchorからConnected Body(または世界)までの相対位置によって決定されます。 これにより、ジョイントしたキャラクターまたはオブジェクトをエディタで設定する際ににスプリング ジョイントが効率的になりますが、スプリングのプッシュ / プル 動作をスクリプティングを通じて、ランタイムで作成するのがより難しくなります。 スプリング ジョイントを使用して、主に GameObject の位置を変更したい場合、リジッドボディで空の GameObject を作成し、それをジョイントされたオブジェクトのConnected Rigidbodyに設定します。 次にスクリプティングで、Connected Rigidbodyの位置を変更でき、期待通りにスプリングが移動します。

Connected Rigidbody

  • ジョイントを起動させるのに、Connected Bodyがを使用する必要はありません。 一般に、オブジェクトの位置および / または回転が依存していない場合のみに使用する必要があります。 Connected Rigidbodyがない場合は、スプリングはワールドに接続します。
 

スプリングとダンパー

スプリングは、オブジェクトをその目的の位置に引っ張り戻す力の強さです。 0 の場合、オブジェクトに引っ張る力はかからず、スプリング ジョイントがかからないかのよう動作します。

Damperは、Springの力に対する抵抗力です。 この値が低いほど、オブジェクトのスプリング力は強くなります。 Damperが増えると、ジョイントによる跳ね返りの量は減ります。

Min & Max Distance

オブジェクトの位置がMinMax Distances間にある場合、ジョイントはオブジェクトに適用されません。 この位置を、有効にするジョイントに対して、これらの値外に移動させる必要があります。

  • ジョイントが機能するよう、Connected Bodyをジョイントに割り当てる必要はありません。
  • 再生モードに入る前に、エディタでジョイント オブジェクトの理想的な位置を設定します。
  • スプリング ジョイントは、リジッドボディを追加する必要があります。