旋转三步走,相机射线

一.Ray 

(1)构建一条射线:1.起点 2.方向 Ray=new ray();

(2)发射射线:Physics.Raycast(ray,hit);  hit为射线射到的,类型为RaycastHit

返回值为Bool , 发射成功:碰到了带有碰撞器的组件,返回true 

                              发射失败:没有检测到碰撞器,返回false

Physics.Raycast()重载方法中的:maxDistance 发射的最大距离; LayerMask 指定射线检测的层

  需要先定义一个public LayerMask layerMask  然后用layerMask.value 之后就能在脚本面板选择层

二.实例

点击鼠标左键,从相机发射一条透过鼠标的射线

RaycastHit  hit;

if(Input.GetMouseButtonDown(0))

{

// 构造一条相机射线

Ray ray = Camera.main.ScreenPointToRay(Input.MousePosition);

// 发射射线

if (Physics.Raycast(ray,out hit))

{

Debug.DrawLine(Camera.main.position,hit.point);

}

}

三. 旋转三步走

1.确定方向 Vector3 dir = target - transform.position;

2.求四元数 Quaternion q = Quaternion.LookRotation(dir);

3.transform.rotation = Quaternion.Lerp(transform.rotation,q,Time.deltaTime*8);

例子:鼠标控制相机上下移动

private void LateUpdate()

    {

         ver = Input.GetAxis("Mouse Y");

         if (ver!= 0)

        {

            x += -ver * Time.deltaTime * roSpeed; //x为要移动的角度,roSpeed是自定义的速度

            x = Mathf.Clamp(x, -20, 45);

            Quaternion q = Quaternion.identity;

            q = Quaternion.Euler(x, x_Axis.transform.eulerAngles.y, x_Axis.transform.eulerAngles.z);

            x_Axis.rotation = Quaternion.Lerp(x_Axis.rotation, q, Time.deltaTime * roSpeed);

          }

}

你可能感兴趣的:(旋转三步走,相机射线)