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

在这里插入图片描述


实现目标

实现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寻路导航的用法。
  • 觉得有用的话关注一下吧

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值