Unity中如何限制物体旋转角度,避免陷入旋转角度限制的深坑?
- 内容介绍
- 相关推荐
本文共计826个文字,预计阅读时间需要4分钟。
今天可能遇到一个简单的要求,却让我纠结半天。移动屏幕控制物体旋转,但角度要在-60到60度之间。不像小孩那样简单直白。判断一下角度是否合适。
今天可是遇到一个很简单的需求,但是却让我蛋疼了半天。
滑动屏幕控制物体旋转,但是旋转的角度要在-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里面了。
那要怎么办呢。解决方法就是:你不是负数 我把你变成负数。
本文共计826个文字,预计阅读时间需要4分钟。
今天可能遇到一个简单的要求,却让我纠结半天。移动屏幕控制物体旋转,但角度要在-60到60度之间。不像小孩那样简单直白。判断一下角度是否合适。
今天可是遇到一个很简单的需求,但是却让我蛋疼了半天。
滑动屏幕控制物体旋转,但是旋转的角度要在-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里面了。
那要怎么办呢。解决方法就是:你不是负数 我把你变成负数。

