はかせのラボ

私の頭の中を書いていく雑記ブログです

Unity RayCastはいいぞ

あいさつ

どうも、はかせです。
今回は久しぶりのUnityです。

RayCast

線形判定といわれるものの一種です。
ある一点から線を引きその線にあたるColliderを返すものです。
これが地味につかえます。

例えば左右に線を飛ばして反応があれば逆側に回転するだけで
お手軽AIがそれっぽく作れます。
あとは視線をRayでお手軽実装出来たりと
無ければならないわけではないですが
色んな機能がお手軽に実装できるようになります。

使い方

では実際にコード書いてみます。

 Ray ray;
 RaycastHit hit;

//レイの生成(レイの原点、レイの飛ぶ方向)
ray = new Ray(transform.position, transform.forward);
//レイの判定(飛ばすレイ、レイが当たったものの情報、レイの長さ)
if (Physics.Raycast(ray, out hit, 1.0f))
{
//Rayの線に何か当たった時の処理
//当たったものの情報はhitの中に格納されている
}

こんな感じです。
これは前方へ1.0fの長さのレイを打ってColliderに当たるか判定しています。
これはRayCastなので最初に当たったColliderしか取れませんが、
RayCastAllという当たったもの全てを取得するものもあります。

ただこのままやるとRayCastは仕事しますが
我々人間にはRayが見えないのでちゃんと仕事してるのかわかりません。
なのでRayを見えるようにしたいです。
Rayを見えるようにするためにはDebug.DrawRayというものを使います。

Debug.DrawRay(transform.position, transform.forward * 1.0f, Color.yellow);

Rayの生成につかったパラメータに長さと色を設定することで
その通りの線を描画してくれます。

ただし描画されるのはSceneビューのみです。
Gameビューには描画されません。Debugですから。

実行結果

では今まで書いたものを実行してみます。
f:id:hakase0274:20190325233410p:plain
上のSceneビューには黄色い線がありますが、
下のGameビューには線がありません。

なのでもし消し忘れたとしても安心ですねw

あとがき

今回はUnityのRayCastでした。
UnityならRayCast使うだけで
「それっぽい」動きが簡単に作れます。

あくまでぽいだけなので厳密には違う動きをしていたり
結構ガバい動きをしたりします。
精度が高い動きが必要な場合はなかなか使いづらいですが、
多少雑でも問題ないものならば使用を検討する価値はあると思います。

それでは今回はこの辺でノシ