【Unity入門】超初心者向け!Raycastの使い方と使い道

こんにちは、カバゴトです!今回は、Raycastの使い方と使い道について超初心者向けに解説していきたいと思います!

目次

Raycastについて

Raycastとは?

次元空間内で仮想的な光線やレイを発射し、その光線が他の物体と交差するかどうかを判定する技術です。これにより、ある位置から特定の方向に向かって光線を飛ばし、その光線が当たった物体や衝突した物体を検出することができます。

Raycastは、ゲーム開発やコンピュータグラフィックスにおいて、さまざまな用途に利用されます。例えば、オブジェクト同士の衝突判定や、オブジェクトの位置や方向を特定するために使用されます。また、シューティングゲームにおいては、銃弾が敵に当たったかどうかを判定するためにも使用されます。

簡単に言うとこんな感じで、物体と物体を光線で判定できます!

Raycastの使い道

Raycastは、さまざまな場面で使用されます。具体的には下のようなものです。

  • プレイヤーと環境の衝突判定・・・プレイヤーと壁やアイテム等との当たり判定
  • プレイヤーとオブジェクトの相互作用・・・プレイヤーが何かをつかんだりする際の操作
  • シューティングゲームでの命中判定・・・弾丸が敵に命中したかの判定
  • AIの動作・・・CPUキャラクターがプレイヤーを判定するなど
  • 視覚効果・・・光線の視覚的な効果と命中した際のエフェクトの表現

Raycast使用例

壁のぼり

この壁のぼりでは球体が壁のほうに近づき、raycastが壁を判定すると上に行くようにしています。

壁のぼりの簡単な作り方

オブジェクトの配置

まず、上のような座標にオブジェクトを準備します。(カメラも2つのオブジェクトが見えるように移動しましょう)

スクリプトの作成

Assets」→「Create」→「C#Script」でスクリプトを作成

using UnityEngine;

public class MoveTowardsObjectWithRaycast : MonoBehaviour
{
    public Transform objectA; // オブジェクトAのTransform
    public Transform objectB; // オブジェクトBのTransform
    public float moveSpeed = 1f; // 移動速度
    public float raycastDistance = 10f; // Raycastの長さ

    private void Update()
    {
        // オブジェクトAからオブジェクトBへRaycastを発射
        RaycastHit hit;
        Vector3 direction = (objectB.position - objectA.position).normalized;
        if (Physics.Raycast(objectA.position, direction, out hit, raycastDistance))
        {
            // Raycastを可視化
            Debug.DrawRay(objectA.position, direction * hit.distance, Color.green);

            if (hit.transform == objectB)
            {
                // オブジェクトBを検知した場合、y軸の正の方向に移動
                Vector3 moveDirection = Vector3.up;
                objectA.Translate(moveDirection * moveSpeed * Time.deltaTime);
            }
        }
        else
        {
            // Raycastが何も検知しなかった場合、オブジェクトAをz軸負の方向に移動
            Vector3 moveDirection = Vector3.back;
            objectA.Translate(moveDirection * moveSpeed * Time.deltaTime);

            // Raycastを可視化
            Debug.DrawRay(objectA.position, direction * raycastDistance, Color.red);
        }
    }
}

オブジェクトAからオブジェクトBへRaycastを発射し、オブジェクトBを検知した場合にはオブジェクトAをy軸の正の方向に移動させます。そして、Raycastが何も検知しなかった場合には、オブジェクトAをz軸負の方向に移動させます。さらに、Raycastを見えるようにしています。

オブジェクトAはここでいう球体で、オブジェクトBは立方体です。

球体にスクリプトをドラッグ&ドロップで入れ、ObjectAに球体(Sphere)、ObjectBに立方体(Cube)をドラッグ&ドロップで入れ、MoveSpeedで速さを設定、RayDistanceでRaycastの長さを決めます。

これで完成です!

終わりに

最後まで読んでくださりありがとうございます!今回は、Raycastの使い方と使い道について解説しました。もし、うまくいない場合や意見等あればコメントの方をよろしくお願いします!

この記事が参考になれば幸いです。また、次回のブログでお会いしましょう!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次