前に Physics.Raycastを試して、その結果をこのブログで書きました。
( カメラからの Raycast を試してみた:http://blog.lab7.biz/archives/2379340.html )
( Physics.Raycast を試してみた:http://blog.lab7.biz/archives/2256403.html )
その後も、けっこう Physicsクラスの Cast系の実装をしますが、すぐ実装法を忘れてしまって自分のブログを参考にすることがよくあります。
と言うことで、他の Cast系メソッドに関しても記述しておこうかと思います。
かつ、他の人の役にもたてれば何よりです。
(Raycastよりは使用頻度は少ないと思いますが。)
今回は、Spherecast を試してみたいと思います。
まず、動きはこんな感じ。
半透明黄色のオブジェクトが、投げている球体レイのだいたいの領域を示しています。
その領域にあるオブジェクトに対して赤線を引くようにしてあります。
Unityちゃんがその領域に入りレイがヒットすると、赤線が移動します。
ここで、注意するところは、この Spherecast の領域。
その形を Blenderで3Dモデルを作ってみましたが以下のようになります。

要は、投げる手前側に球の空間ができてしまいます。
よって、動画の中で、Unityちゃんが手前の球の空間に入ると、レイのヒットがされなくなり、赤線の対象が移動しています。
今回のソースは以下となります。(すごくシンプルです。)
( カメラからの Raycast を試してみた:http://blog.lab7.biz/archives/2379340.html )
( Physics.Raycast を試してみた:http://blog.lab7.biz/archives/2256403.html )
その後も、けっこう Physicsクラスの Cast系の実装をしますが、すぐ実装法を忘れてしまって自分のブログを参考にすることがよくあります。
と言うことで、他の Cast系メソッドに関しても記述しておこうかと思います。
かつ、他の人の役にもたてれば何よりです。
(Raycastよりは使用頻度は少ないと思いますが。)
まず、Physicsクラスには Cast系のメソッドがいろいろあります。
Unityマニュアルから、Cast系のメソッドを抜粋しました。
( https://docs.unity3d.com/jp/540/ScriptReference/Physics.html )
Unityマニュアルから、Cast系のメソッドを抜粋しました。
( https://docs.unity3d.com/jp/540/ScriptReference/Physics.html )
| BoxCast | ボックスのレイを飛ばし、オブジェクトコライダーの付いたオブジェクトがヒットするかを調べ、ヒットしたら詳細情報を返します |
| CapsuleCast | カプセル型のレイを飛ばし、オブジェクトコライダーの付いたオブジェクトがヒットするかを調べます |
| Linecast | 始点と終点を設定してそこに線を張り、コライダーがヒットした場合 true を返します |
| Raycast | シーンにあるすべてのコライダーに対して、origin の位置から direction の方向に maxDistance の距離だけレイを投じます |
| SphereCast | 球体のレイを飛ばし、オブジェクトコライダーの付いたオブジェクトがヒットするかを調べ、ヒットしたら詳細情報を返します |
今回は、Spherecast を試してみたいと思います。
まず、動きはこんな感じ。
半透明黄色のオブジェクトが、投げている球体レイのだいたいの領域を示しています。
その領域にあるオブジェクトに対して赤線を引くようにしてあります。
Unityちゃんがその領域に入りレイがヒットすると、赤線が移動します。
ここで、注意するところは、この Spherecast の領域。
その形を Blenderで3Dモデルを作ってみましたが以下のようになります。

要は、投げる手前側に球の空間ができてしまいます。
よって、動画の中で、Unityちゃんが手前の球の空間に入ると、レイのヒットがされなくなり、赤線の対象が移動しています。
今回のソースは以下となります。(すごくシンプルです。)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Spherecast_Test : MonoBehaviour {
void Update () {
RaycastHit hit;
// If Ray hit something
if (Physics.SphereCast (transform.position, 3,
transform.forward, out hit, 10)) {
// Draw Red Line
Debug.DrawLine(transform.position, hit.point, Color.red);
}
}
}
Sponsored Link

E-Mail: