【Unity】Rayについて

Unityの「Ray(レイ)」は、3D空間において見えない直線を使って、何かに当たったかどうかを判定するためのツールです。この資料では、Rayの基本概念とその使い方を解説します。

Rayとは?

Rayは、発射地点と方向を指定することで、無限に伸びる直線を作り、その線上にあるオブジェクトに当たるかどうかを確認します。Rayは、視覚的には見えませんが、オブジェクトに対して判定を行う際に使用されます。

Rayの作成

Rayは、発射地点と方向の2つの要素で作成されます。

Ray ray = new Ray(発射地点, 方向);
  • 発射地点: Rayをどこから飛ばすかを指定します。例えば、カメラの位置(Camera.main.transform.position)がよく使われます。
  • 方向: Rayをどの方向に飛ばすかを指定します。カメラの向き(Camera.main.transform.forward)を使うことが多いです。

Raycastを使った衝突判定

Rayを飛ばして何かに当たったかを確認するためには、Physics.Raycastメソッドを使用します。

if (Physics.Raycast(ray, out RaycastHit hitInfo))
{
    // 当たったオブジェクトの処理
    Debug.Log(hitInfo.collider.name);
}
  • Physics.Raycast: Rayがオブジェクトに当たったかどうかを判定します。
  • RaycastHit hitInfo: Rayが当たった場合、そのオブジェクトの情報がhitInfoに格納されます。オブジェクトの名前や位置情報を取得できます。

サンプルコード

以下は、カメラの前方にRayを発射し、オブジェクトに当たった場合、そのオブジェクトの名前をコンソールに表示するサンプルコードです。

void Update()
{
    // カメラの位置からカメラの向きにRayを飛ばす
    Ray ray = new Ray(Camera.main.transform.position, Camera.main.transform.forward);

    // Rayがオブジェクトに当たったかどうかをチェック
    if (Physics.Raycast(ray, out RaycastHit hitInfo))
    {
        // 当たったオブジェクトの名前を表示
        Debug.Log("Hit object: " + hitInfo.collider.name);
    }
}

このコードは、毎フレームカメラの向きにRayを発射し、何かに当たるとそのオブジェクトの名前をコンソールに出力します。

応用例

Rayを使うことで、以下のような機能を実現できます。

  • 照準機能: プレイヤーがどこを狙っているかを判定。
  • オブジェクト選択: カメラからマウスクリック位置に向けてRayを発射し、オブジェクトを選択。
  • AIの視界システム: 敵キャラクターが視界内のプレイヤーを見つける。

まとめ

Rayは、3D空間における衝突判定に使用される重要なツールです。見えない直線として動作し、視線の判定やオブジェクトの選択など、多様な場面で活用できます。

参考

Unity

Posted by hidepon