ある位置からある方向に存在するゲームオブジェクトを判定させるのに Raycast を使います。
イメージとしてはある位置から仮想のレーザービームを照射して、それがヒットした際のオブジェクト情報を取得します。
イメージとしてはある位置から仮想のレーザービームを照射して、それがヒットした際のオブジェクト情報を取得します。
それには、
1.Scene上のゲームオブジェクトからある方向に存在するオブジェクトを判定させる。
(ゲームオブジェクトからのRayの照射)
2.Cameraから画面上のある位置の先に存在するオブジェクトを判定させる。
(カメラからのRayの照射)
1.Scene上のゲームオブジェクトからある方向に存在するオブジェクトを判定させる。
(ゲームオブジェクトからのRayの照射)
2.Cameraから画面上のある位置の先に存在するオブジェクトを判定させる。
(カメラからのRayの照射)
のような使い方があります。
具体的にはこれらを用いて、シューティングゲームで敵AIから見て自分との間に障害物がなければ敵AIが自分を撃ってくるとか、3D空間上にあるゲームオブジェクトを画面上からマウスで選択するとか、アイデア次第でいろいろなことができます。
【ゲームオブジェクトからのRayの照射】
適役のUnity標準のThirdPersonControllerが、Playerがコントロールしているユニティちゃんの方向を常に向いています。
もし二人の間に障害物がなくユニティちゃんを直視できる状態であるとRayのビームを赤く表示させます。
以下の実行画面は、左がGame画面、右がScene画面です。
このThirdPersonControllerに適用したRaycastのC#ソースは以下です。
public class Raycast_Test : MonoBehaviour {
public Transform target; RaycastHit hit;
void FixedUpdate() { // Face to target direction transform.rotation =
Quaternion.LookRotation (target.position - transform.position);
// Create 'Ray' to forward direction Ray ray = new Ray(transform.position, transform.forward);
// If Ray hit someting if (Physics.Raycast (ray, out hit, 15)) {
// If the object is "Player" if (hit.collider.tag == "Player") {
// Draw Red Line Debug.DrawLine(ray.origin, hit.point, Color.red);
} } } }
また、カメラからのRayの照射はまた次回試します。
Sponsored Link