时间:2021-05-19
今天可是遇到一个很简单的需求,但是却让我蛋疼了半天。
滑动屏幕控制物体旋转,但是旋转的角度要在-60到60之间。
乍一听这简直是小儿科啊。
判断一下角度不就行了。相比这四元数,欧拉角虽然有时会出现万向锁,但是简洁明了啊。
这不,我就中了一个简洁明了的大坑。
图中,如果你以为transform.eulerAngles =(-1,0,90)
那就大错特错了。
因为对于旋转来说。360度是一个循环。-1° 也可以算是就是359°
而且unity就是这样认为的。面板上虽然显示的是-1。但是他运行时是359。
这就让我的判断出了问题。
if(angle>60) transform.eulerAngles = new Vector3(60, transform.eulerAngles.y, transform.eulerAngles.z); if(angle<-60) transform.eulerAngles = new Vector3(-60, transform.eulerAngles.y, transform.eulerAngles.z);这样你就会发现 你的物体处并不受控制,有时候还会出现一种奇葩的状态。
因为当x的值小于0后,他又变回359了。这样又走到第一个if里面了。
那要怎么办呢。解决方法就是:你不是负数 我把你变成负数。
public float CheckAngle(float value) { float angle = value - 180; if (angle > 0) return angle - 180; return angle + 180; }通过这个方法,将他的角度在变回负数。
可以看到 图中 x的值是-26但是输出实际上是333。经过方法的转换才能成为显示的值。
这样就可以计算了。
2011年就有人提出这个问题了。在官方论坛下2016年还有回答。看来真是坑了不少人。
补充:Unity RotateAround固定旋转
当前显示的为本地坐标系
//旋转视野void rotateVeiw(){float x=Input.GetAxis("Mouse X");float y=Input.GetAxis("Mouse Y");//函数参数(旋转点,旋转轴,旋转量)旋转效果相当于旋转轴平移到旋转点上后 沿此轴旋转相应的量。
例上图,如果沿本地坐标的Y轴旋转 则会出现旋转偏移到地下的情况。
必须使用下式 沿世界坐标的y轴旋转
transform.RotateAround(plear.position,Vector3.up,x);当单纯的左右旋转时,x轴都为固定的,所以没有区别。
但当左右移动后,本地坐标的x轴和世界坐标的x轴有出入。
例如:此时如果选用世界坐标x轴,则左右移动后的x轴还是固定的,左右移动移动一定的量后
世界就会开始倾斜:如下图所示:
所以此时我们应采用 本地坐标轴x
transform.RotateAround(plear.position, transform.right, y);}以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方,望不吝赐教。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例为大家分享了Unity实现物体沿任意轴向旋转,供大家参考,具体内容如下一、创建一个需要旋转的物体二、编写控制该物体的脚本usingUnityEngine
wps插入图片以后想要旋转角度,该怎么旋转角度呢?下面我们就来看看wps图片旋转角度的教程。软件名称:WPSOfficeProPlus2016(wps2016专
引入下方的jquery.rotate.js文件,然后通过$("选择器").rotate(角度);可以旋转任意角度,例如$("#rotate-image").ro
本文实例为大家分享了opencv实现图像旋转效果的具体代码,供大家参考,具体内容如下图像旋转:在opencv中首先根据旋转角度和中心获取旋转矩阵,然后根据旋转矩
位图的旋转也可以借助Matrix或者Canvas来实现。通过postRotate方法设置旋转角度,然后用createBitmap方法创建一个经过旋转处理的Bit