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