2014.11.07
はじめてのUnity 【第10回 Unityの物理特性① Rigidbody】
はじめてのUnity 【第10回 Unityの物理特性① Rigidbody】
Unityの物理特性① Rigidbody
今回からUnityの物理特性の仕組みと、利用方法について紹介していきます。
まずはRigidbody コンポーネントについて見ていきます。
Rigidbody コンポーネントにより、GameObject が物理特性エンジンの制御下で動作するようになります。
Rigidbody コンポーネント
Unityは初めから「PhysX」(フィジックス) というエンジンを内蔵しているので、ユーザーはGameObject に
Rigidbody コンポーネントを追加するだけで、 複雑な物理演算による挙動を扱えるようになります。
インスペクターのプロパティ
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ゲーム開発基礎
実際のリリースゲームを題材にしたハンズオンゲーム制作連載
実践unityゲーム開発