C# Unity3d-与';完全不同的eulerAngles(本地和全局);督察
在游戏对象的检查器中,我使用的起始旋转是“-90”,但当我运行C# Unity3d-与';完全不同的eulerAngles(本地和全局);督察,c#,unity3d,quaternions,euler-angles,C#,Unity3d,Quaternions,Euler Angles,在游戏对象的检查器中,我使用的起始旋转是“-90”,但当我运行print(transform.eulerAngles.x)时,我得到270(transform.localEulerAngles.x与transform.localEulerAngles.x相同) 如果我向下倾斜游戏对象,inspector X值会变得更大(比如说,到-85)。打印的transform.eulerAngles.x也变得更大,比如说274 这里是事情变得奇怪的地方: 如果我向上倾斜gameObject,检查器x坐标会变
print(transform.eulerAngles.x)
时,我得到270(transform.localEulerAngles.x与transform.localEulerAngles.x相同)
如果我向下倾斜游戏对象
,inspector X值会变得更大(比如说,到-85)。打印的transform.eulerAngles.x
也变得更大,比如说274
这里是事情变得奇怪的地方:
如果我向上倾斜gameObject
,检查器x坐标会变小(例如,变为-95),但打印的eulerAngle.x
值会变大(这里变为274)。因此,如果我将对象从eulerAngle.x
为270向上或向下旋转,那么x值无论如何都会增加
我在这里肯定做错了什么,但是经过很多故障排除,我仍然不知道是什么。有什么想法吗?在Unity3D中,颂词是一个复杂的过程。您不应在inspector或代码中增加/减少或设置值。应仅使用绝对值来读取和设置它
不要增加或减少这些值,因为当角度超过360度时,它将失败。你用的是变换。旋转
以下是Unity3D文档示例中的示例代码:
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);
}
}
这直接取自文件:
还可以转换、旋转文档:
当你记录它时,检查员几乎总是给你一个时髦的值。唯一的一致性就是打印(transform.rotation)。对于transform.eulerAngles
或transform.localEulerAngles
中的每个值,如果其具有父项,则应在检查器和代码中保留类似的值:-
if (value > 270)
value =- 360;
游戏对象是另一个游戏对象的子对象吗?不是/unity文档中反复解释了这一点。只需使用“旋转”。就是这么简单。试着用“旋转”恐怕没那么简单。。。那也不行……我已经看过文档了。我没有增加或减少值,只是读取它们。编辑:另外,关于打印的部分(transform.rotation)不正确。transform是一个四元数,因此打印它将只提供x、y、z、w四元数值,而不是eulerAngles。请尝试记录transform.rotation.eulerAngles.x。对于转换。旋转。EulrLang.x和Trime.Euler-Lang.x,Doto to LoaleuleRangLas.Xi想知道打印的Euler-Lang.x值是否使用不同的空间与检查器。我有一个有趣的事情要尝试。也许可以将变换的eulerangle保存在一个具有公共作用域的Vector3变量中,以便您可以在inspector中看到它。在Update()中输出变量以跟踪它,并在inspector中查看它们是否相关。