Unity鼠标控制相机上下左右环视360度旋转(Quaternion.AngleAxis)
之前实现的是相机的360度旋转,用的是LocalEulerAngle,这一篇文章实现用的是Quaternion.AngleAxis,这个方法将绕某个轴旋转的角度转为四元数
目前的四元数=初始的四元数*绕X轴转的四元数*绕Y轴转的四元数
理解也比较好理解,就是绕某个轴旋转的角度,转换为四元数,然后将转换后的四元数*初始的四元数=最新的四元数
using UnityEngine;using System.Collections;
using System.Collections.Generic;public class SmoothMouseLook : MonoBehaviour {public float sensitivity = 4.0f;[HideInInspector]public float sensitivityAmt = 4.0f;//actual sensitivity modified by IronSights Scriptprivate float minimumX = -360f;private float maximumX = 360f;private float minimumY = -85f;private float maximumY = 85f;[HideInInspector]public float rotationX = 0.0f;[HideInInspector]public float rotationY = 0.0f;[HideInInspector]public float inputY = 0.0f;public float smoothSpeed = 0.35f;private Quaternion originalRotation;private Transform myTransform;[HideInInspector]public float recoilX;//non recovering recoil amount managed by WeaponKick function of WeaponBehavior.cs[HideInInspector]public float recoilY;//non recovering recoil amount managed by WeaponKick function of WeaponBehavior.csvoid Start(){ if (rigidbody){rigidbody.freezeRotation = true;}myTransform = transform;//cache transform for efficiencyoriginalRotation = myTransform.localRotation;//sync the initial rotation of the main camera to the y rotation set in editorVector3 tempRotation = new Vector3(0,Camera.main.transform.eulerAngles.y,0);originalRotation.eulerAngles = tempRotation;sensitivityAmt = sensitivity;//initialize sensitivity amount from var set by player// Hide the cursorScreen.showCursor = false;}void Update(){if(Time.timeScale > 0 && Time.deltaTime > 0){//allow pausing by setting timescale to 0//Hide the cursorScreen.lockCursor = true;Screen.showCursor = false;// Read the mouse input axisrotationX += Input.GetAxisRaw("Mouse X") * sensitivityAmt * Time.timeScale;//lower sensitivity at slower time settingsrotationY += Input.GetAxisRaw("Mouse Y") * sensitivityAmt * Time.timeScale;//reset vertical recoilY value if it would exceed maximumY amount if(maximumY - Input.GetAxisRaw("Mouse Y") * sensitivityAmt * Time.timeScale < recoilY){rotationY += recoilY;recoilY = 0.0f; }//reset horizontal recoilX value if it would exceed maximumX amount if(maximumX - Input.GetAxisRaw("Mouse X") * sensitivityAmt * Time.timeScale < recoilX){rotationX += recoilX;recoilX = 0.0f; }rotationX = ClampAngle (rotationX, minimumX, maximumX);rotationY = ClampAngle (rotationY, minimumY - recoilY, maximumY - recoilY);inputY = rotationY + recoilY;//set public inputY value for use in other scriptsQuaternion xQuaternion = Quaternion.AngleAxis (rotationX + recoilX, Vector3.up);Quaternion yQuaternion = Quaternion.AngleAxis (rotationY + recoilY, -Vector3.right);//smooth the mouse inputmyTransform.rotation = Quaternion.Slerp(myTransform.rotation , originalRotation * xQuaternion * yQuaternion, smoothSpeed * Time.smoothDeltaTime * 60 / Time.timeScale);//lock mouselook roll to prevent gun rotating with fast mouse movementsmyTransform.rotation = Quaternion.Euler(myTransform.rotation.eulerAngles.x, myTransform.rotation.eulerAngles.y, 0.0f);}else{//Show the cursorScreen.lockCursor = false;Screen.showCursor = true; }}//function used to limit anglespublic static float ClampAngle (float angle, float min, float max){angle = angle % 360;if((angle >= -360F) && (angle <= 360F)){if(angle < -360F){angle += 360F;}if(angle > 360F){angle -= 360F;} }return Mathf.Clamp (angle, min, max);}}
FR:海涛高软(Hunk Xu)
QQ技术交流群:386476712
Unity鼠标控制相机上下左右环视360度旋转(Quaternion.AngleAxis)相关推荐
- Unity 基础 之 鼠标控制 相机(摄像机Camera)的旋转,移动和 fov 的简单使用整理
Unity 基础 之 鼠标控制 相机(摄像机Camera)的旋转,移动和 fov 的简单使用整理 目录 Unity 基础 之 鼠标控制 相机(摄像机Camera)的旋转,移动和 fov 的简单使用整理 ...
- Unity 在zSpace上使用鼠标控制相机旋转和鼠标指引式放大缩小,在触屏上手势位置为中心放大缩小
在zSpace上使用鼠标控制相机旋转和鼠标指引式放大缩小,在触屏上手势位置为中心放大缩小 鼠标和触屏的操作 下面展示一些 内联代码片. using System; using System.Colle ...
- Unity3d实现鼠标控制相机绕物体旋转(带阻尼)
Unity3d实现鼠标控制相机绕物体旋转(带阻尼) 本来想的是用四元数实现球性插值实现阻尼效果,但是不知道四元数怎么绕定点旋转.因此用速度衰减的方法进行实现. 1.实现鼠标控制相机带阻尼旋转 2.实现 ...
- Cesium 键盘鼠标控制相机漫游(源码+原理讲解)
Cesium 键盘鼠标控制相机漫游(源码+原理讲解) 在各大博客平台上,Cesium使用键盘控制相机漫游的源码已经有不少人贴出源码,本人在浏览这些源码的过程中发现大家采用的方式基本一致,大部分代码都是 ...
- 图像scale与相机参数_基于Ladybug全景相机图像的360度全方位测距算法
基于Ladybug全景相机图像的360度全方位测距算法 [专利摘要]本发明公开了一种基于Ladybug全景相机图像的360度全方位测距算法,它涉及计算机视觉领域中的图像测距[技术领域].其方法步骤:读 ...
- Unity鼠标控制摄像机 围绕物体旋转
Unity鼠标控制摄像机 围绕物体旋转 角度范围判定 // An highlighted block using UnityEngine;public class CameraCtrl : MonoB ...
- 【Blender】使用Blender渲染一段360度旋转的动画
目录 一.前言 二.方法描述 三.渲染设置 四.结果 一.前言 本文主要讲述了如何使用Blender渲染一段物体360度旋转的动画. 渲染好的效果如下: 二.方法描述 第一步:shift+A,我们在B ...
- 【精心挑选】10款基于 jQuery 的图片360度旋转插件
之前的文章向大家分享了实现网站功能的各种优秀的 jQuery 插件,今天这篇文章向大家推荐10款基于 jQuery 的图片360度旋转插件,同时还有非常详细的制作教程可以学习和参考.图片旋转展示是一种 ...
- 旋转矩阵中6保6_40岁阿姨发明新型手推车,可以360度旋转,干活效率提升6倍
科技,其实很有趣!大家好,欢迎收看本期木易机械 40岁阿姨发明新型手推车,能够360度旋转,干活效率提升6倍 科技的发展是我们有目共睹的,不仅是那些震惊世界的发明,就在我们的日常生活中,也有很多的小发 ...
- 360度旋转图片小特效
现在,在这个网络发达的时代,一些电子商务公司,需要将自己线上的产品给买家或用户看,为了能让用户了解的更全面,那么把一个物件的产品要展示到方方面面,就要运用到360度旋转图片特效,因为上次有朋友叫我帮她 ...
最新文章
- pandas使用Categorical函数将object数据数据列转化为categorical数据列并基于categorical的因子(分类)水平排序dataframe
- Symantec Endpoint Protection 11 混乱的版本
- GRE词汇乱序版-夹生的词汇3
- android 多线程断点续传下载 三
- 语文好的人是怎么做到的?
- SPOJ-LCS Longest Common Substring
- python k线合成_在VNPY中策略中,使用分钟线合成日K线
- MySql学习笔记(六):扫描范围
- SiTime 硅晶振抖动定义和测量方法
- 软件过程管理课程知识点总结
- android 九宫格手势密码 纯代码实现
- matlab多元线性回归方程代码
- lync服务器不响应或无法联系,Lync 2013 已知问题
- LSH 近似最近邻查找
- android使用精伦身份证读卡器读身份证
- SAP中SD交货与WM下架功能的集成应用
- spark python_Python、流、SQL 有更新!耗时两年,Spark 3.0 重磅发布!
- 在vue项目中使用echarts中的dataset制作多维度的柱状图
- 8. R语言画:散点图、直方图、条形图、箱线图、小提琴图、韦恩图
- 数据可视化-《白蛇2:青蛇劫起》(1)