レイのクラスを見て見ましょう。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(); //触发凝视目标所绑定的方法
}
}