Raycastとは、指定した方向へ「光線(Ray)」を飛ばし、衝突したオブジェクトの情報を取得する機能です。
光線は目に見えませんが、ゲームの内部で様々な処理を行うために使用されます。
例えば、
銃弾が何かに当たったか?
プレイヤーの視線の先に何があるか?
マウスカーソルがどのオブジェクトを指しているか?
といったことを判定するときに使います。
Physics.Raycast関数を使うことで、Raycastを使うことが出来ます。
using UnityEngine;
public class SampleScript : MonoBehaviour
{
[SerializeField] private float RaycastDistance = 100f; // 光線を飛ばす距離
void Update()
{
// Rayの始点と方向を定義
Vector3 origin = transform.position; // オブジェクトの現在位置
Vector3 direction = transform.forward; // オブジェクトの向いている方向
// 衝突情報を格納する変数
RaycastHit hit;
// Raycastを実行
if (Physics.Raycast(origin, direction, out hit, RaycastDistance))
{
// 衝突したオブジェクトの名前、位置、タグをログに出力
Debug.Log("Hit object: " + hit.collider.gameObject.name);
Debug.Log("Hit position: " + hit.point);
Debug.Log("Hit tag: " + hit.collider.gameObject.tag);
}
}
}
Debug.DrawRay関数を使用すると、Raycastで使用しているRayをシーンビューに描画して可視化できます。 これにより、Rayが意図した方向に飛んでいるか、どのオブジェクトに衝突しているかを視覚的に確認でき、 デバッグが容易になります。
using UnityEngine;
public class SampleScript : MonoBehaviour
{
[SerializeField] private float RaycastDistance = 100f; // 光線を飛ばす距離
void Update()
{
// Rayの始点と方向を定義
Vector3 origin = transform.position; // オブジェクトの現在位置
Vector3 direction = transform.forward; // オブジェクトの向いている方向
Debug.DrawRay(origin, direction * RaycastDistance, Color.red);
}
}
DrawRayを使った場合下の画像のように赤い線がシーンビューで見えるようになります。
※Debug.DrawRayは、あくまでシーンビューにのみ描画され、ゲームビューには表示されません。