Beaver's Hive Logo

Beaver's Hive Blog

Official Web
Post image

UnityでRaycastを使用して遠くのオブジェクトを検出する

February 5, 2025

    こんにちは、ゲーム班のわたなべです。

    UnityでRayを利用することでコライダー同士の接触以外でオブジェクトの当たり判定を実装することが出来ます。

    ◯リファレンス
    このあたりを参照しておくと基本は押さえられると思います。
    https://docs.unity3d.com/ja/2019.3/ScriptReference/Ray.html
    https://docs.unity3d.com/ja/2019.3/ScriptReference/RaycastHit.html
    https://docs.unity3d.com/ja/2019.3/ScriptReference/Debug.DrawRay.html

    これを用いてゲームオブジェクトの正面にある別のオブジェクトを削除してみます。

    やってみた

    さくっとプログラムを作成してオブジェクトにアタッチします。

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class rayblog : MonoBehaviour
    {
    
        void destroyHitObject()
        {
            // ゲームオブジェクトのポジション(始点)を取得
            Vector3 pos = this.gameObject.transform.position;
    
            // 前方向
            Vector3 range = transform.TransformDirection(Vector3.forward) * 5;
    
            // 値を受け取る
            RaycastHit hit;
    
            // Rayを描画
            Debug.DrawRay(pos, range, Color.red);
    
            // 判定
            if (Physics.Raycast(pos, range, out hit))
            {
                // ゲームオブジェクトをデストロイ
                GameObject.Destroy(hit.rigidbody.gameObject);
            }
    
        }
        // Update is called once per frame
        void Update()
        {
            destroyHitObject();
        }
    }

    このとき相手方のオブジェクトには、Rayの判定のためのコライダーと、オブジェクトの取得に利用するRigidBodyをアタッチしておく必要があります。

    実装した内容でテストプレイしてみます。

    オブジェクトを削除できました。

    おわり

    オブジェクトを貫通しての複数オブジェクトの取得などもできるので非常に使い勝手が良いです。
    コライダー同士の接触では判定しづらい場面もあると思いますのでぜひRayを使ってみてはいかがでしょうか。
    ではでは✋️

    Category:

    "その他"カテゴリの記事