このブログは「ファイブボックス一分間Unity講座」の補足説明となる記事です。主にUnityに初めて触れる方や初心者向けの講座になります。
またUnityに慣れてきている方でも、もう少し知識や技術を磨きたい方にとっても有益な情報も記載していますので、もしよろしければご参照ください。
今回は3Dオブジェクトに重力を与える方法です。
3Dオブジェクトに重力を与えるには「Rigidbody」コンポーネントを追加します。Rigidbodyコンポーネントを追加した場合、重力で落下してしまいますので、オブジェクトとそれを受け止める地面に 「Collider」コンポーネントという当たり判定を追加する必要があります。
地面への当たり判定追加
今回はPlaneを使って地面の役割とします。
ヒエラルキー Create ⇒ 3DObject ⇒ Plane を選択し、正方形の地面を作成します。
「Plane」にはデフォルト状態で「Mesh Collider」という当たり判定がついています。
Transformコンポーネントの右上、三点リーダーを選択し、表示されたメニューパネルから「Reset」を選択します。これでPosition、Rotationがすべて 0 、大きさは基準の大きさになります。なお、Planeは基準の大きさが、X軸、Y軸の大きさが10となります。
地面が無地の場合、この先の動きが見えにくいので、任意のマテリアルを設定します。
サンプルのマテリアルをSceneウィンドウで「Plane」の上、または「Plane」のInspectorにドラッグ&ドロップします。
Unity-Chan の Rigidbodyコンポーネント
Inspector の「AddConponent」から Rigidbodyコンポーネントを追加します。
Rigidbodyコンポーネントの各プロパティは基本の部分はそのままでOKです。
Constraints プロパティの「Freeze Rotation」のみすべてにチェックを入れて、オブジェクトの回転を無効にしておきます。
なお、Rigidbodyコンポーネントの各プロパティの詳細は以下の通りです。
- Mass (質量)
- オブジェクトの質量を設定します。質量が大きいほど、オブジェクトは力に対して動きにくくなります。逆に質量が小さいと、力を受けたときに動きやすくなります。
- Drag (空気抵抗)
- オブジェクトに対する空気抵抗の大きさを設定します。値が高いとオブジェクトが移動する際に速度が速く減少し、逆に低いとスムーズに移動し続けます。
- Angular Drag (角空気抵抗)
- オブジェクトが回転する際の空気抵抗の大きさを設定します。角空気抵抗が高いと、回転が早く減速し、低いと回転が持続しやすくなります。
- Automatic Center of Mass (自動質量中心)
- 質量中心(質量の集中点)を自動的に計算するオプションです。このチェックボックスがオンになると、UnityはRigidbodyの質量中心を自動的に計算して、物理シミュレーションを行います。これにより、より正確な回転や挙動が得られ、物理エンジンがより自然な挙動をシミュレートします。
- Automatic Tensor (自動慣性テンソル)
- このチェックボックスがオンになると、UnityはRigidbodyの慣性テンソル(物体の回転に対する抵抗)を自動的に計算します。これにより、物体の回転に関するシミュレーションがより正確になります。自動で設定することで、物理エンジンが物体の回転挙動を自然に扱うことができます。
- Use Gravity (重力を使用)
- このチェックボックスがオンになっていると、Rigidbodyは重力の影響を受けます。オフにすると、重力の影響を受けずにオブジェクトが移動します。
- Is Kinematic (キネマティック)
- このチェックボックスがオンになると、Rigidbodyは物理エンジンによる自動的な動き(力や衝突など)を無視し、スクリプトからの直接的な制御のみが可能になります。例えば、Transformで位置を直接変更する場合に使います。
- Interpolate (補間)
- このオプションは、Rigidbodyの位置と回転を滑らかに表示するために使用します。 None(補間なし):物理計算のフレームごとの更新のみが反映され、動きがカクカクすることがあります。 Interpolate(補間あり):物理シミュレーションのフレーム間でスムーズな動きを実現します。
- Collision Detection (衝突検出)
- 衝突検出の精度を設定します。 Discrete(離散):標準の物理計算に基づく衝突検出で、速度が速いオブジェクトでは衝突が検出されない場合があります。 Continuous(連続):高速で動くオブジェクトでも正確な衝突検出が行われます。
- Constraints (制約)
- このセクションで、Rigidbodyの移動や回転に対する制約を設定します。たとえば、X軸、Y軸、Z軸の位置や回転を固定することで、オブジェクトが特定の方向に動かないようにすることができます。これにより、物理的な制約を加えたり、特定の軸での自由度を制限することができます。
Unity-Chan のCapsule Colliderコンポーネント
Inspector の「AddConponent」から Capsule Colliderコンポーネントを追加します。
Unity-Chan は160cm程度のようです。大きさに合わせ、Collider の大きさを次のように調整します。
Center (中心): X : 0 , Y : 0.8 , Z : 0
Radius(半径): 0.2
Height(高さ): 1.6
各プロパティ値は以下の内容です
- Is Trigger(トリガーフラグ)
- このプロパティにチェックが入っていると、Colliderを持っているオブジェクト同士が衝突せず、侵入する状態になります。
- Provides Contacts(接触情報を提供)
- このプロパティが有効になっていると、Colliderは接触情報を生成し、衝突や接触に関する詳細なデータを取得できるようになります。これにより、スクリプトや物理エンジンが衝突の詳細なデータ(例えば、接触点の位置や法線ベクトル)を取得できるようになります。この情報は、例えばカスタムの衝突反応や詳細な物理シミュレーションを行う際に役立ちます。
- Material(Material)
- Physics Materialを指定することで、CapsuleCollider の摩擦や弾性を制御できます。例えば、滑りやすくしたり、衝突時に弾むようにすることができます。
- Radius (半径)
- Capsule の横断面の半径を指定します。Capsule の形状が、指定した半径を持つ円筒のように横に広がります。値が大きいほど、Capsul の「太さ」が増します。
- Height (高さ)
- Capsule の縦の長さを指定します。Capsule の「高さ」がこの値で決まります。
- Center (中心)
- Capsule の中心の位置をColliderのローカル座標で指定します。これにより、Capsule がシーン内のどの位置に配置されるかを調整できます。
- Direction (方向)
- Capsule の「高さ」がどの方向に向かうかを指定します。方向は0(Y軸)、1(X軸)、または2(Z軸)から選べます。
- Layer Overrides(レイヤーオーバーライド)
- コライダーが衝突するレイヤーに対して、特定の衝突ルールを上書きするためのオプションです。Unityの物理エンジンでは、コライダーがどのレイヤーに対して衝突を行うかを制御するために、レイヤー設定を使用します。
ではすべてのコンポーネントが追加された状態で、Playボタンを押してみましょう。しっかり地面の上に立つことができました。
まだ動きがないので重力が働いているという効果が見えにくいですが、大丈夫です。
ファイブボックスでは、Unityの個別指導のオンラインレッスンを行っています。
ご興味のある方は当サイト、オンラインレッスンから、無料体験授業へお問い合わせ下さい。