はじめてのUnity 【第10回 Unityの物理特性① Rigidbody】

この記事は2014年11月7日に書かれたものです。内容が古い可能性がありますのでご注意ください。


はじめてのUnity 【第10回 Unityの物理特性① Rigidbody】

Unityの物理特性① Rigidbody

今回からUnityの物理特性の仕組みと、利用方法について紹介していきます。

まずはRigidbody コンポーネントについて見ていきます。
Rigidbody コンポーネントにより、GameObject が物理特性エンジンの制御下で動作するようになります。


Rigidbody コンポーネント

Unityは初めから「PhysX」(フィジックス) というエンジンを内蔵しているので、ユーザーはGameObject に
Rigidbody コンポーネントを追加するだけで、 複雑な物理演算による挙動を扱えるようになります。


インスペクターのプロパティ

Rigidbody コンポーネントで編集できるプロパティについて見てみましょう。

WS000053
図1:Rigidbody のインスペクター

表1:プロパティの項目と説明

プロパティ 説明
Mass オブジェクトの質量(kg)です。オブジェクト同士で作用する力の計算に使われます。
公式のリファレンスによると、他のオブジェクトの100倍以下に設定すべきだそうです。
Drag 力により動く際の、オブジェクトに対する抵抗の量です。
数値が大きいほどすぐ止まります。
Angular Drag トルクにより回転する際の、オブジェクトに対する抵抗の量です。
大きいほど、動き出すために必要な力が増えます。
Use Gravity チェックを入れると、オブジェクトが重力の影響を受けます。
Is Kinematic チェックを入れると、スクリプトによるTransform コンポーネントの操作によってのみ、
物理的な力が加わります。
Interpolate 動作の補完のモードが選択できます。
None 補完を行いません。デフォルトの設定です。
Interpolate 前フレームのTransform に基づいて、動作を補完します。
Extrapolate 次フレームのTransform を予測して、動作を補完します。
Collision Detection 衝突判定の方式を選択できます。
高速で動くオブジェクトが、衝突判定をすり抜けてしまう場合に変更します。
Discrete 一定間隔ごとに衝突検知を行っています。
Continuous 静止しているMesh Collider に対してのみ、連続的な衝突検知を行います。処理が重くなるので、すり抜けが起きてしまう場合だけ使用します。
Continuous Dynamic 静止しているMesh Collider に加えて、Continuous もしくは、 Continuous Dynamic が設定されたオブジェクトに対して連続的な衝突検知を行います。高速で動くオブジェクトなどに使用します。
Constraints ワールド座標系での、移動や回転を制限する設定です。
Freeze Position X、Y、Z軸ごとに移動を制限できます。
Freeze Rotation X、Y、Z軸ごとに回転を制限できます。

Rigidbody 使用上の注意

トランスフォームによる移動はリジットボディによる移動と違い、物理特性は無視し、力の影響を受けません。
しかし、リジットボディによって生じた力による移動や回転は、トランスフォームの位置や回転の値を変更します。

そのため、例えば物理特性を使用中のオブジェクトに、スクリプトからトランスフォームの値に変更を加えようとすると、
予期せぬ結果になったり、衝突判定の計算などに問題が生じる可能性があるので、注意が必要です。


まとめ

Rigidbody コンポーネントを使うことで、GameObject は簡単に重力などの物理特性を得ることができます。
しかし、より正確な衝突判定や、物理特性を利用するためには、コライダーについての知識が必要です。

コライダーについては次回、詳しく紹介していきます。


最後までお読みいただきありがとうございます。
← Unityの記事一覧にもどる

[Unity_728×90]

  • このエントリーをはてなブックマークに追加

PAGE TOP