UnityでRaycast(レイキャスト)を使うと、ゲームオブジェクトが特定の方向に見えるものを検出したり、何かにぶつかるかどうかを確認したりすることができます。例えば、プレイヤーが視線の先にあるオブジェクトをクリックできるゲームや、キャラクターが前方の障害物を認識して回避するゲームなどに役立ちます。
この記事では、UnityでRaycastを使う方法を初心者向けにわかりやすく解説します。シンプルな例として、プレイヤーのカメラから発射されたRayがどのオブジェクトに当たっているかを確認するスクリプトを紹介します。
UnityでRaycastを使う手順
- 新しいプロジェクトの作成 Unityを開いて、新しい3Dプロジェクトを作成します。ヒエラルキーウィンドウで右クリックして、「3D Object」→「Cube」を選んで、シーン内にキューブを配置します。これがRayが当たる対象となります。
- カメラを設定 ヒエラルキーウィンドウで「Main Camera」を選択し、プレイヤーが見やすいように配置を調整します。
- スクリプトの作成 プロジェクトウィンドウを右クリックして「Create」→「C# Script」を選び、「RaycastScript」と名前を付けます。このスクリプトを編集して、以下のコードを入力します。
using UnityEngine;
public class RaycastScript : MonoBehaviour
{
void Update()
{
// カメラの前方にRayを飛ばす
Ray ray = new Ray(transform.position, transform.forward);
RaycastHit hit;
// Rayがオブジェクトに当たったかをチェック
if (Physics.Raycast(ray, out hit, 100f))
{
Debug.Log("Rayは " + hit.collider.name + " に当たった!");
}
}
}
- このコードでは、毎フレーム、カメラの位置から前方に向かってRayを飛ばし、そのRayが何かに当たったかを調べます。当たった場合、そのオブジェクトの名前がコンソールに表示されます。
- スクリプトをカメラにアタッチ ヒエラルキーウィンドウで「Main Camera」を選び、「RaycastScript」をドラッグ&ドロップしてカメラにアタッチします。
- シーンを再生して確認 「Play」ボタンを押してシーンを再生します。カメラの前にオブジェクト(例えば、キューブ)を置くと、コンソールに「Rayは Cube に当たった!」というメッセージが表示されるはずです。
よくある質問
Q1: Raycastの範囲を変更するにはどうすればいいですか?
A1: スクリプト内の Physics.Raycast(ray, out hit, 100f)
の 100f
を好きな距離に変更することで調整できます。
Q2: Raycastで特定のレイヤーのオブジェクトだけを検出するには?
A2: Physics.Raycast
にレイヤーマスクを追加します。例えば、Physics.Raycast(ray, out hit, 100f, LayerMask.GetMask("MyLayer"))
とすると、「MyLayer」レイヤーに属するオブジェクトだけを検出します。
Q3: Rayが見えないため、確認しにくいです。どうすれば視覚化できますか?
A3: デバッグ用に Debug.DrawRay(transform.position, transform.forward * 100, Color.red);
を使うと、シーンビューでRayが赤い線として表示されます。