レイのクラスを見て見ましょう。RayRとaycastです。
Ray(Vector3 origin, Vector3 direction)
レイ(光線)の表現: 原点から方向ベクトルの方角に進むレイを作成します。
void Update() { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Physics.Raycast(ray, out hit, 100)) Debug.DrawLine(ray.origin, hit.point); } vector3 touchPos = Input.mousePosition(); touchPos = Camera.main.ScreenToWorldPoint(touchPos ); vector3 dir = touchPos - Camera.main.transform.position; Ray ray = new Ray(Camera.main.transform.position, dir * 9999);以下のように、いくつかオーバーロード関数があります。
static function Raycast (origin : Vector3, direction : Vector3, distance : float = Mathf.Infinity, layerMask : int = kDefaultRaycastLayers) : bool
static function Raycast (origin : Vector3, direction : Vector3, out hitInfo : RaycastHit, distance : float = Mathf.Infinity, layerMask : int = kDefaultRaycastLayers) : bool
static function Raycast (ray : Ray, distance : float = Mathf.Infinity, layerMask : int = kDefaultRaycastLayers) : bool
static function Raycast (ray : Ray, out hitInfo : RaycastHit, distance : float = Mathf.Infinity, layerMask : int = kDefaultRaycastLayers) : bool
ディスクリプション:
シーンにあるすべてのコライダーに対して、 origin の位置から direction の方向に maxDistance の距離だけレイを投じます。
FixedUpdate()関数で実行します。例:
void FixedUpdate(){
Vector3 fwd = transform.TransformDirection (Vector3.forward);
if (Physics.Raycast (transform.position, fwd, 10)) { //前方向で10ユニット距離 }
}
void FixedUpdate(){
Vector3 fwd = transform.TransformDirection (Vector3.forward);
RaycastHit hitInfo;
if (Physics.Raycast (transform.position, fwd, out hitinfo, 10)) { //前方向で10ユニット距離 }
}
参考: http://blog.csdn.net/qq_15267341/article/details/62884312
視点トリガー:
void diaoYong(GameObject gameObj) { timer += Time.deltaTime; LoadImage.GetComponent<Image>().fillAmount = 1- timer/coldTime;//从1到0减小 if (timer >= coldTime) //转圈刚转完就执行 { timer = 0; gameObj.GetComponent<Button>().onClick.Invoke(); //触发凝视目标所绑定的方法 } }
