Skip to content

Physicsと当たり判定 ​

描画と衝突は別 ​

MeshRendererでモデルを表示しても、そのまま物理判定の形状になるとは限りません。接触に使うCollisionと、動かすRigidbodyを設定します。

Component役割
Collision形状、衝突タイプ、Trigger、押し戻し
Rigidbody3Dの質量、重力、速度、力、接触応答
Rigidbody2D2Dの移動・回転と接触応答
FixedJoint剛体間の固定接続
HingeJoint軸に沿った回転接続

落下する物体を作る ​

  1. Cubeなどを置き、Collisionの形状を見た目へ合わせます。
  2. Rigidbodyを追加し、Dynamicと重力を有効にします。
  3. 床にもCollisionを設定し、固定物として扱います。
  4. 「プロジェクト設定 → 衝突設定」で双方の衝突タイプが接触できる組み合わせかを確認します。
  5. Playし、落下して床へ止まることを確認します。

Dynamicは物理で動き、Kinematicはゲーム側の制御、Staticは固定物です。毎frameのTransform設定と物理の速度計算を同時に行うと競合するため、動かし方を揃えます。

Forceと速度 ​

物理に関わる継続的な操作はFixedUpdateで行います。力、衝撃、速度変更はForceModeで意味が異なります。秒数を掛ける必要も同じではないため、力と移動量を取り違えないでください。

Freeze Position/Rotationで軸を固定できます。質量、摩擦、反発、減衰を1項目ずつ変えて比較します。

接触を受け取る ​

OnCollisionEnter、OnCollisionStay、OnCollisionExitの引数には、相手GameObject、接触点、法線、めり込み量、Triggerかどうかなどが入ります。通知中に対象を破棄した場合、その後の参照を使い続けないでください。

Raycast ​

cs
using NEMEngine;

public sealed class MouseRaycast : MonoBehaviour {

    void Update() {
        // クリック位置からCameraのRayを取得
        if (!Input.GetMouseButtonDown(0)) return;
        if (!Camera.TryGetMouseRay(out var ray)) return;
        // 100単位以内の当たり位置を調べる
        if (Physics.Raycast(ray, out var hit, 100.0f)) {
            Debug.Log($"命中位置: {hit.point}");
        }
    }
}

CameraからのRayはゲームView内のマウス位置を使います。画面外やCamera不在の場合にRayを作れないことがあります。

Raycastの対象は描画MeshとCollisionなどで選別できます。判定LayerとTriggerの扱いも指定できます。描画の透明部分・変形と、判定形状が常に完全一致するとは限りません。

Joint ​

接続先のRigidbodyと、双方のAnchorを設定します。HingeJointでは回転軸と角度制限も確認します。接続先を非アクティブ・破棄する場面では、Joint側の参照が残ることを想定して制御します。

Collision · Rigidbody · Physics API

現行版マニュアル · 8ea58ba2 · 2026-10-28確認