UnityにおけるRaycastのレイヤー判定と使用方法


Raycastは、指定した方向に光線(レイ)を飛ばし、衝突したオブジェクトの情報を取得することができます。レイヤー判定を行うためには、RaycastHit構造体を使用します。

まず、Raycastの基本的な使用方法を紹介します。以下のコード例では、プレイヤーが前方に光線を飛ばし、衝突したオブジェクトの情報を表示する例です。

void Update()
{
    if (Input.GetMouseButtonDown(0))
    {
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        RaycastHit hit;
        if (Physics.Raycast(ray, out hit))
        {
            Debug.Log("衝突したオブジェクト: " + hit.collider.gameObject.name);
        }
    }
}

上記のコードでは、マウスの左クリックが押されると、カメラからマウス位置に向かって光線が飛ばされます。もし光線がオブジェクトに衝突した場合、RaycastHit構造体の情報が取得され、衝突したオブジェクトの名前がデバッグログに表示されます。

次に、Raycastのレイヤー判定について説明します。RaycastHit構造体には、衝突したオブジェクトの情報だけでなく、そのオブジェクトが属するレイヤーの情報も含まれています。

例えば、特定のレイヤーに属するオブジェクトだけを対象とした判定を行いたい場合、以下のようなコードを使用します。

void Update()
{
    if (Input.GetMouseButtonDown(0))
    {
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        RaycastHit hit;
        int layerMask = LayerMask.GetMask("MyLayer"); // レイヤー名を指定
        if (Physics.Raycast(ray, out hit, layerMask))
        {
            Debug.Log("衝突したオブジェクト: " + hit.collider.gameObject.name);
        }
    }
}

上記のコードでは、LayerMask.GetMask関数を使用して、判定対象とするレイヤーを指定しています。この場合、レイヤー名として"MyLayer"を指定していますが、実際には使用するレイヤー名に合わせて変更してください。

以上が、UnityにおけるRaycastのレイヤー判定と使用方法の基本的な解説です。これらのコード例を参考にして、自分のプロジェクトに適したRaycastの使い方を見つけてください。