Posted at

Unityのレイキャストとは何ぞや?(自分用)

More than 1 year has passed since last update.


Unityのレイキャストって何だろう?


最初に

このメモは自分用に残しているので大雑把な箇所が多いです。基本的にUnity公式から公開されているレイキャストに関するチュートリアル動画を文書化したものとなっています。ご了承ください。


レイキャストとは

レイキャストとはある地点から透明な線を特定の方向に引いて、そのRay上のどこかでコライダがあるか検知をするものです。例えば、ゲームであれば銃から弾を発射して敵に攻撃する場合などに用います。

Unityでは特にオブジェクトにタッチなどを行なった場合の当たり判定の実装として使われています。レイキャスターはキャンバス上にある全てのグラフィックを監視し、透明な線がどのオブジェクトにヒットしたのかを決定します。また、判定を行いたくない、つまりレイキャストをブロックするオブジェクトのタイプやマスクを設定することもできます。

関数は以下の通りです。

Physics.Raycast(Vector3 origin,Vector3 direction,out RaycastHit hitInfo, float distance, int LayerMask);

最初に、Rayの原点はワールド空間座標のどこかの地点となっています。今回の場合は銃の銃口の前の地点を選んでVector3変数のoriginとしてXYZを格納します。しかしワールド空間座標の向きは撃つ方向に向いていないため、二つ目の引数、directionに向きを格納する必要があります。この二つのVector3変数によりRayが構成されます。さらにRay変数により代用が可能であり、このデータ型で二つのVector3変数を格納できます。

//Ray myRay = new Ray(Vector3 origin, Vector3 direction);

//メインカメラ上のマウスカーソルのある位置からRayを飛ばす。

Ray myRay = Camera.main.ScreenPointToRay(Input.mousePosition);

Physics.Raycast(myRay,out RaycastHit hitInfo, float distance, int Layer Mask);

RaycastHit変数はコライダの衝突に基づいて情報を格納します。これによりコードの中で検索をかけて、どのオブジェクトがRayと交差するか判定できます。



最後に必須ではない関数が二つあります。一つはDistanceであり、Rayの長さが決まり、省略した場合はRayの長さはデフォルトでInfinityとなります。そしてレイヤーマスク(Layer Mask)です。これはUnityのレイヤーシステムにおける特定のレイヤー番号であり、もしRayに無視させたいオブジェクトがある場合そのレイヤーに配置することが実現できます。


Raycastの使い方

参考になりそうなブログのリンクまとめ(自分用)


参考