一.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);
}
}
网友评论