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

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

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を使ってみてはいかがでしょうか。
ではでは✋️

コメントする