unity rotate 旋转物体 限制物体旋转角度 的大坑
2017-07-28 14:41
2016 查看
今天可是遇到一个很简单的需求,但是却让我蛋疼了半天。
滑动屏幕控制物体旋转,但是旋转的角度要在-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年还有回答。看来真是坑了不少人。
http://answers.unity3d.com/questions/141775/limit-local-rotation.html
滑动屏幕控制物体旋转,但是旋转的角度要在-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年还有回答。看来真是坑了不少人。
http://answers.unity3d.com/questions/141775/limit-local-rotation.html
相关文章推荐
- Transform---绝望的欧拉角-=限制物体的旋转角度
- 【狼】unity 鼠标拖拽物体实现任意角度自旋转
- Unity设置物体旋转角度误区
- Unity 控制物体绕自身的x,y,z 轴旋转,transform.Rotate()
- 【Unity】初始化物体的旋转角度
- unity 物体在世界坐标Y轴上的旋转角度怎么求
- unity之RotateAround 一个物体围绕另外一个物体旋转
- unity限制目标物旋转角度
- unity 鼠标拖拽物体实现任意角度自旋转
- unity 根据鼠标的移动来旋转物体Rotate
- Unity设置物体旋转角度误区
- Unity 获取物体正前方绕Y轴旋转一定角度后的方向
- 面向组件编程之Unity 7.怎样脚本控制物体旋转和移动 关键字:画圆&&Translate/transform.Translate,transform.Rotate
- 物体围绕某个点旋转一定角度
- <Unity>鼠标拖动物体、按下鼠标左键旋转观察物体、鼠标滚轮缩放视野
- 【Unity 3D学习】获取鼠标滑动方向(上下左右)-控制摄像机围绕物体旋转
- unity中根据手指在屏幕中的滑动旋转物体
- unity中通过收拾实现物体旋转和放大缩小
- 限制旋转物体的欧拉角
- OpenCV轮廓检测,计算物体旋转角度