Unity Physics システム概要
Unityの物理システム(Physics)は、ゲーム内でリアルな動きや衝突、重力を再現するために使われます。これにより、オブジェクトが現実世界の物理法則に基づいて動作し、自然な挙動を作り出すことができます。
1. Rigidbody
Rigidbody
は、オブジェクトに物理的な特性を与えるためのコンポーネントです。これを追加することで、重力や力がオブジェクトに作用し、リアルな動きをシミュレートします。
主なプロパティ
- Mass(質量): オブジェクトの重さを決定します。値が大きいほど、動かすのに必要な力が大きくなります。
- Drag(空気抵抗): オブジェクトが移動するときの抵抗を設定します。
- Angular Drag(角速度抵抗): オブジェクトが回転する際の抵抗を設定します。
サンプルコード: 力を加える
void Update()
{
// 前方に力を加える
Rigidbody rb = GetComponent<Rigidbody>();
rb.AddForce(transform.forward * 10f);
}
2. Collider
Collider
は、オブジェクト同士がぶつかったり触れ合ったりすることを検知するためのコンポーネントです。Rigidbody
と一緒に使うことで、物体の物理的な衝突をシミュレートします。
よく使うColliderの種類
- Box Collider: 立方体の形状を持つコライダー。箱や壁などに適しています。
- Sphere Collider: 球形のコライダー。ボールや丸いオブジェクトに使います。
- Capsule Collider: カプセル型のコライダー。キャラクターなど縦長のオブジェクトに適しています。
サンプルコード: Colliderを使った衝突検知
void OnCollisionEnter(Collision collision)
{
Debug.Log("オブジェクトと衝突しました: " + collision.gameObject.name);
}
3. Trigger
Collider
は「Trigger」として設定することができます。この設定を有効にすると、物理的な衝突は無視されますが、オブジェクトが触れた瞬間に特定の処理を行うことができます。
サンプルコード: Triggerの使用
void OnTriggerEnter(Collider other)
{
Debug.Log("トリガーに入りました: " + other.gameObject.name);
}
4. Physic Material
Physic Material
を使うことで、物体がどれだけ滑るか、どれだけ跳ねるかを制御できます。例えば、氷の上のように滑りやすくしたり、バウンドさせたりできます。
プロパティ
- Friction(摩擦): 表面の滑りやすさを設定します。
- Bounciness(反発力): オブジェクトが跳ね返る力を設定します。
サンプルコード: 物理マテリアルの適用
// Physic Materialをコードで設定
Collider collider = GetComponent<Collider>();
collider.material.bounciness = 0.5f;
5. Raycasting
Raycasting
は、特定の方向に仮想の線(レイ)を飛ばし、その線上にオブジェクトがあるかどうかを検出するための技術です。これにより、プレイヤーの視点上のオブジェクトや、障害物の検知などが可能になります。
サンプルコード: Raycastの使用
void Update()
{
Ray ray = new Ray(transform.position, transform.forward);
RaycastHit hit;
if (Physics.Raycast(ray, out hit, 100f))
{
Debug.Log("オブジェクトにヒット: " + hit.collider.gameObject.name);
}
}
6. Physics Simulation
Unityの物理システムは、フレームごとに物理演算を行います。物理演算の更新タイミングは「Fixed Timestep」で管理されており、ゲームのフレームレートとは独立しています。物理演算の精度やパフォーマンスを調整するために、Fixed Timestep
の設定を変更することも可能です。
まとめ
UnityのPhysicsシステムは、現実世界の物理法則をゲーム内に再現するための強力なツールです。Rigidbody
やCollider
を使ってオブジェクトに物理特性を付加したり、Raycast
を利用してオブジェクト間の関係を検知したりすることで、よりインタラクティブなゲームプレイを実現できます。
ディスカッション
コメント一覧
まだ、コメントがありません