实现目标
实现unity3D中相机位置球形旋转位移跟随
文章中的关键名词(也就是文章中蓝色的字体)都是加了unity文档超链接的。
大家可以点入进去,详细了解知识点。
不重复制造轮子。
一、实现屏幕鼠标拖动与旋转角相关联
public float RotateSpeed = 360;
private float rotateYaw = 0;
private float rotateXaw = 0;
rotateXaw += Input.GetAxis("Mouse X") * RotateSpeed * Time.deltaTime;
rotateYaw += Input.GetAxis("Mouse Y") * RotateSpeed * Time.deltaTime;
rotateYaw = Mathf.Clamp( rotateYaw,-5,80 );
-
使用Input.GetAxis() 获取鼠标在平面滑动的量(Input.GetAxis的值在-1到1)
-
Input.GetAxis与360f和Time.deltaTime相乘(使之最大值和最小值确保为一秒钟内360度)
-
可以使用 Mathf.Clamp(变量,最小值,最大值 ); 限制rotateXaw的大小
二、使用 Quaternion.AngleAxis,欧拉角和四元数实现位置球行环绕变换
public void zhuan(Transform p,Vector3 cc)
{
var rot = Quaternion.AngleAxis(rotateYaw, new Vector3(0 ,0 ,1));
var rot2 = Quaternion.AngleAxis(rotateXaw, new Vector3(0, 1, 0));
p.position = Vector3.Lerp(p.position, rot2*rot * new Vector3(10, 0, 0), 0.5F);
this.transform.LookAt(new Vector3(0,0,0));
}
- 使用Quaternion.AngleAxis(旋转角度,旋转轴)得出四元组;
- 用x,y的四元组乘上物体标准位置(也就是一个固定的位置)
标准旋转x,y轴,则固定位置因该是new vector(0,0,1)想要改变相机距离中心的远近只需要改变vector中的z值
- 在调用Transform.LookAt 一直使相机的z轴指向目标(0,0,0)
三、实现跟随移动目标
public void zhuan(Transform p,Vector3 cc)
{
var rot = Quaternion.AngleAxis(rotateYaw, new Vector3(0 ,0 ,1));
var rot2 = Quaternion.AngleAxis(rotateXaw, new Vector3(0, 1, 0));
p.position = Vector3.Lerp(p.position, rot2*rot * new Vector3(10, 0, 0), 0.5F)+移动的物体.position;
this.transform.LookAt(new Vector3(0,0,0)+移动的物体.position);
}
就是将之前的vector(0,0,0)转化为想要跟踪的物体的position。
总结
- 下次讲解unity寻路导航的用法。
- 觉得有用的话关注一下吧