UnityでのPhysics.Raycastを使用したサンプルコード

この技術資料では、Physics.Raycastを用いてシーン内のオブジェクトを検出する方法について説明します。以下のコードは、カメラからマウスの位置に向けてレイを飛ばし、何かのオブジェクトにヒットした場合に、そのオブジェクトの情報を取得し、特定の処理を行います。

コード

using UnityEngine;

public class RaycastExample : MonoBehaviour
{
    void Update()
    {
        // マウスの左クリックを検知したときにレイを飛ばす
        if (Input.GetMouseButtonDown(0))
        {
            // マウスの左ボタンがクリックされたことをデバッグログに表示
            Debug.Log("マウスボタンがクリックされました");

            // カメラのスクリーン座標からレイを作成(マウスの位置からシーン内の方向へ)
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            Debug.Log("レイが作成されました。位置: " + Input.mousePosition);

            RaycastHit hit; // レイが何かにヒットしたときの情報を格納する変数

            // レイキャストを行い、何かにヒットしたかを確認する
            if (Physics.Raycast(ray, out hit))
            {
                // レイが何かのコライダーにヒットした場合の処理
                Debug.Log("レイキャストがヒットを検出しました");

                // ヒットしたオブジェクトの名前をコンソールに出力する
                Debug.Log("ヒットしたオブジェクト: " + hit.collider.gameObject.name);

                // ヒットしたオブジェクトにRendererコンポーネントがある場合、色を変更する
                Renderer renderer = hit.collider.gameObject.GetComponent<Renderer>();
                if (renderer != null)
                {
                    // レンダラーが見つかったので、オブジェクトの色を赤に変更する
                    Debug.Log("レンダラーが見つかりました。色を赤に変更します");
                    renderer.material.color = Color.red;
                }
                else
                {
                    // レンダラーコンポーネントが見つからない場合の処理
                    Debug.Log("ヒットしたオブジェクトにレンダラーコンポーネントが見つかりませんでした");
                }
            }
            else
            {
                // レイキャストが何にもヒットしなかった場合の処理
                Debug.Log("レイキャストが何もヒットしませんでした");
            }
        }
    }
}

解説

マウスのクリックを検知

  • Input.GetMouseButtonDown(0) を使ってマウスの左クリックを検知します。0は左ボタンを示します。

レイの作成

  • Camera.main.ScreenPointToRay(Input.mousePosition) を使用して、カメラからマウス位置に向けてレイを作成します。このレイはシーン内のオブジェクトに向かって飛びます。

レイキャストの実行

  • Physics.Raycast(ray, out hit) でレイキャストを行い、何かにヒットしたかどうかを判定します。ヒットした場合、その情報が hit 変数に格納されます。

ヒットしたオブジェクトの処理

  • レイがオブジェクトにヒットした場合、そのオブジェクトの名前を Debug.Log で出力します。
  • ヒットしたオブジェクトに Renderer コンポーネントがあれば、その色を赤に変更します。

ヒットしなかった場合の処理

  • レイが何にもヒットしなかった場合、そのことをデバッグログに出力します。

応用例

  • このコードはクリックしたオブジェクトを視覚的にフィードバックする際に有用です。例えば、ゲーム内でオブジェクトを選択する機能を実装する場合に応用できます。

注意点

  • Camera.main を使用するため、シーン内に Main Camera タグが設定されたカメラが必要です。
  • Renderer コンポーネントがないオブジェクトには色変更が適用されないため、他の方法でオブジェクトを識別する必要があるかもしれません。

終わりに

この技術資料を基に、Unityでのレイキャストの基本的な使用方法を理解し、ゲームやシミュレーションなどのプロジェクトで役立ててください。

Unity,当たり判定

Posted by hidepon