unity rotate方法要z一直是0
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unity rotate方法要z一直是0相关的知识,希望对你有一定的参考价值。
camera.Rotate(new Vector3 (beforeMousePosition.y - Input.mousePosition.y
, Input.mousePosition.x - beforeMousePosition.x, 0) * 10*Time.deltaTime);
我这样写的 可是出来的效果z轴自己会变 我想要x y 变 z一直是0应该怎么写 求大神赐教
要实现你的要求,用rotate或者rotatearound里的绕轴旋转功能
比如camera.Rotate(Vector3.forward, 角度数值, Space.Self); 大概就是这样。 参考技术A function Rotate (eulerAngles : Vector3, relativeTo : Space = Space.Self) : void
应用一个欧拉角的旋转角度,eulerAngles.z度围绕z轴,eulerAngles.x度围绕x轴,eulerAngles.y度围绕y轴(这样的顺序)。
你所说的xyz是什么,坐标么?你是想让摄像机在一个平面转动还是让摄像机一直朝上,你可以加第二个参数试试 Space.World追问
就是想让摄像机的rotation 的 x y 设定成我给的一个值 z是不变的 我想有没有一个方法是直接设置 x y z的
Unity脚本-Rotate旋转相关知识点
1,Transform旋转
transform.Rotate(X, Y, Z);//分别绕X,Y,Z轴旋转,可写为绕某个轴旋转,栗子transform.Rotate(0, 90, 0);
transform.Rotate(Vector3.right * Time.deltaTime);//以欧拉角旋转,顺序是ZXY,right是向X轴旋转1度
transform.Rotate(0, 45, 0, Space.World);//绕世界坐标系的XYZ轴旋转,也就是其顶层父物体的坐标系,如果自身在顶层则没有区别,并不是绕点旋转,而是不按照自身的坐标系旋转
transform.Rotate(Vector3.up, Space.Self);//绕自身坐标系旋转,这是默认的
transform.RotateAround(Vector3.zero, Vector3.up, 20 * Time.deltaTime);//绕点旋转,旋转轴,角度
transform.rotation = Quaternion.identity;//旋转可由四元数直接指定
transform.eulerAngles = new Vector3(angle);//由欧拉角直接指定
自动旋转:
在update中旋转并配合Time.deltaTime即可
2.Quaternion四元数
- AngleAxis(angle : float, axis : Vector3) 绕axis轴旋转angle,创建一个旋转。
- Angle (a : Quaternion,b : Quaternion) 返回a和b两者之间的角度。
- Dot点乘 用法同上
- eulerAngles 返回表示旋转的欧拉角度。
- Euler (x : float,y : float, z : float) 用于返回一个指定的欧拉角,需要使用欧拉角表示旋转时很有用
- FromToRotation (fromDirection :Vector3,toDirection : Vector3) 从from到to创建一个旋转(计算出旋转的四元数)
- identity相当于“无旋转”:即这个物体完全对齐于世界或父轴。
- Inverse 返回反向的旋转。
- Lerp插值
- LookRotation注视旋转
- operator !=运算符 不等于
- operator *运算符 乘法
- operator ==运算符 等于
- Quaternion构造四元数
- RotateTowards转向
- SetFromToRotation从from到to的旋转
- SetLookRotation注视旋转
- Slerp球形插值
- this [int index]操作索引
- ToAngleAxis 转换一个旋转用“角-轴”表示。
- ToString转字符串
- w组件
- x组件
- y组件
- z组件
从以上可以看出我们既可以按角-轴旋转也可以根据向量计算出要旋转的角度
平滑旋转:
transform.rotation = Quaternion.Slerp (from : Quaternion, to : Quaternion,Time.fixedTime* smooth);
Lerp插值比Slerp更快但是如果旋转较远看起来就比较差。
注视旋转:
Quaternion LookRotation(Vector3 forward, Vector3 upwards);
创建一个旋转,沿着forward(z轴)并且头部沿着upwards(y轴)的约束注视。 也就是建立一个旋转,使z轴朝向forward,y轴朝向up。
所得的结果是 以forward为目标朝向时的旋转角,用于控制角色旋转很有用
3,刚体旋转
rigidbody.MoveRotation (rot : Quaternion)
对于运动学刚体,它基于刚体的运动应用摩擦力。模拟刚体的旋转。
如果你想其他的刚体与运动学刚体交互,你需要在FixedUpdate函数中使用它。
4,注视
transform.LookAt (target : Transform, worldUp : Vector3 = Vector3.up)
旋转物体使z轴(forward)指向目标物体。
当该物体设置了LookAt并指定了目标物体时,该物体的z轴将始终指向目标物体,在设置了worldUp轴向时,该物体在更接近指定的轴向是旋转便的灵活,注意worldUp指的是世界空间,不论你物体在什么位置,只要接近指定的轴方向,旋转会变的更灵活。
5,DoTween旋转transform.DoLocalRotate();
transform.DoRotate();//函数记不大清楚了,应该就这两个,不清楚的可以在查下
unity中旋转rotation默认是以四元数存储的,按我们的习惯是欧拉角,通常需要将欧拉角转为四元数
以上是关于unity rotate方法要z一直是0的主要内容,如果未能解决你的问题,请参考以下文章