> 文档中心 > unity U3D相机跟随人物移动 摄像机 跟踪 视角 Quaternion.AngleAxis 欧拉角和四元数

unity U3D相机跟随人物移动 摄像机 跟踪 视角 Quaternion.AngleAxis 欧拉角和四元数

在这里插入图片描述

文章目录

  • 实现目标
  • 一、实现屏幕鼠标拖动与旋转角相关联
  • 二、使用 Quaternion.AngleAxis,欧拉角和四元数实现位置球行环绕变换
  • 三、实现跟随移动目标
  • 总结

实现目标

实现unity3D中相机位置球形旋转位移跟随


一、实现屏幕鼠标拖动与旋转角相关联

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);    }

总结

  • 下次讲解unity寻路导航的用法。
  • 觉得有用的话关注一下吧