using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LookMoveTo : MonoBehaviour {
//当該スクリプトは1人称カメラの方向を検知し、
//その方向にレイを飛ばし、
//障害物までの位置情報を得て、
//WalkTarget2オブジェクトをそこへ強制移動させる機能を有する。
//レイの衝突を検出する対象をインスペクターパネルから設定するために、
//パブリック変数groundとして定義する。
public GameObject ground;
void Update () {
//ローカル変数を定義する:camera , ray , hit , hitObject
//現在アクティブなカメラオブジェクトCamera.mainのtransform情報を保持する。
Transform camera = Camera.main.transform;
//レイrayを定義する。
Ray ray;
//レイキャストからの当たり判定を保持する変数。
//旧:RaycastHit hit; hitは後述のforループの中で定義する。
RaycastHit[] hits;
//rayが衝突したオブジェクト情報を保持する変数。
GameObject hitObject;
//レイを描く
//引数:レイの開始座標,レイの方向ベクトル(クオータニオンとして)
Debug.DrawRay(camera.position, camera.rotation * Vector3.forward * 100.0f);
//カメラからのrayを保持する。引数(レイの開始座標,レイの方向ベクトル(単位長さ))
ray = new Ray(camera.position, camera.rotation*Vector3.forward);
//追加コード:レイが衝突したオブジェクト全てを検出し、hitsリストに格納する。
hits = Physics.RaycastAll(ray);
//追加コード:hitsリストの中でgroundオブジェクトがないか探して、
// あったら実行するように変更する。
for(int i = 0; i < hits.Length; i++){
//レイキャストからの当たり判定を保持する変数hit。hitsリストの1要素。
RaycastHit hit = hits[i];
//衝突したオブジェクトは hit.collider.gameObject に
//格納されているので、取り出す。
hitObject = hit.collider.gameObject;
//衝突したオブジェクトが、インスペクター上で設定したオブジェクトのとき
if (hitObject == ground){
//衝突座標hit.pointを出力する
Debug.Log("Hit (x,y,z):" + hit.point.ToString("F2"));
//当該スクリプトがアタッチされているオブジェクトの座標transform.positionを
//レイの衝突座標hit.pointへ強制的に変更する。
transform.position = hit.point;
}
}
}
}