はじめに
クリックで何かを選択する,弾の当たり判定をとるなどRaycastはアプリやゲーム開発で重要な機能に利用されます.ユーザーとプログラム間のやり取り(インタラクション)機能を作成する上での基礎といえるでしょう.
この記事ではそんなRaycastについて直感的な解説を行い,スクリプトの理解につなげていきます.
ぜひRaycastを自在に扱えるようになってください!
Raycastとは
視覚的な効果を持つわけではないので,Raycastのイメージができていない方も多いのではないでしょうか.
Raycastとは,とても直感的に説明すると以下のようになります.
- プレイヤーやカメラから見えない光線を出す
- 光線が当たった相手の情報を得る

このイメージを持ちながら改めてスクリプトを見ていきましょう.
Raycastを利用した基本スクリプトの例
マウスでクリックしたオブジェクトの情報をLogに出力するスクリプトを用意しました.
public class Raycast : MonoBehaviour
{
void Update()
{
if (Input.GetMouseButtonDown(0))
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if(Physics.Raycast(ray, out hit))
{
Debug.Log("hit : " + hit.transform.name);
}
}
}
}

もちろん,書き換えれば様々な情報を出力することができます.
Raycastを利用した基本スクリプトの解説
まずはマウスの左クリックを検出し,Camera.main.ScreenPointToRay()
を実行します.ここではマウスでクリックした位置からRay(光線)を飛ばしています.
次にPhysics.Raycast(ray, out hit)
はクリック位置から飛ばした光線がオブジェクトに当たっていればtrueを返します.またこの時,RaycastHit型で用意したhitという変数に当たったオブジェクトを渡します.
最後に,hit.transform.nameを使って当たったオブジェクトの名前にアクセスしています.

Raycastはどんな時に使う?
さて,ではアプリ開発やゲーム開発においてRaycastはどんな時に使われているのでしょう?
最も身近で一般的な利用は「マウスで何かを選択する」時です.ここまで読んでいただいた方であれば,先の例で示したスクリプトを基にしてほとんど実装できると思います.
ほかにも,FPS等のシューティングゲームにおける弾当たり判定なんかにも使われています!
このようにRaycastはオブジェクト選択や当たり判定など,あらゆるインタラクション(交流,やり取り)の基本になります.
ぜひ皆様の作品でも活かしてみてください!