最近在用unity编写机群防御演示的项目,在编写子母机和导弹的代码时用到了eulerAngles和rotation的概念,我不是很懂unity,算是新手了,也不了解eulerAngles和rotation的区别,就直接随便找了一个可以改变角度的函数用了,结果就出了问题,被师父劈头盖脸一顿骂~~~~于是就自己去查了unity的API,现在就将自己所了解的分享给大家,互相学习,欢迎之处不足之处。
先说eulerAngles,以下是unity的API对eulerAngles的描述:
描述
欧拉角的旋转角度。
x,y和z角表示围绕z轴的z度,围绕x轴的x度以及围绕y轴的y度(以该顺序)。
只能使用这个变量来读取和设置角度为绝对值。不要增加它们,因为当角度超过360度时它会失败。改用Transform.Rotate。
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour {
public float yRotation = 5.0F;
void Update() {
yRotation += Input.GetAxis("Horizontal");
transform.eulerAngles = new Vector3(10, yRotation, 0);
}
void Example() {
print(transform.eulerAngles.x);
print(transform.eulerAngles.y);
print(transform.eulerAngles.z);
}
}
不要单独设置一个eulerAngles轴,如下:
eulerAngles.x = 10;
这是不合法的,这样做会导致意想不到的结果。当你想要改变角度时,必须得像最上面那样一次性设置值。
在接着看rotation,同样,先看一下rotation在unity的API中的描述:
描述
世界空间变换的旋转以四元数形式存储。
Unity在内部存储四元数旋转。要旋转对象,请使用Transform.Rotate。使用Transform.eulerAngles将旋转设置为欧拉角。
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour {
void Example() {
transform.rotation = Quaternion.identity;
}
}
只看API里的讲述是不能明白
eulerAngles和rotation的区别的(至少我没明白)。
我也看了其他人关于eulerAngles和rotation区别的理解,总结起来就一句话: eulerAngles的角度是不能随时变化的,是一个定值,而rotation的角度是可以增加的,eulerAngles用vector3来赋值,而rotation用Quaternion来赋值。