目标:我有一个3D按钮。每次我点击它,我希望它在X轴上旋转180度。
说明:一边是“转1”,另一边是“转2”。所以我希望它能在转弯时翻转。
脚本旋转按钮但不旋转180度,每次点击旋转的程度都会降低,直到翻转按钮然后停止工作。
请告诉我我做错了什么,我读过有关vector3,四元数和欧拉角的文章,我尝试了所有我能想到的组合。 另一个解决方案是使用一个标志,如果已经旋转按钮,则将按钮向后旋转180度,但我真的想了解为什么这不起作用。
这是我的剧本:
public Quaternion newRotation;
public Quaternion oldRotation;
void Update()
{
if (Input.GetMouseButtonDown(0))
{
RaycastHit hit;
var ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out hit))
{
if (hit.transform.gameObject.name == "EndTurnButton")
{
oldRotation = hit.transform.rotation;
newRotation = new Quaternion(oldRotation.x + 180, oldRotation.y, oldRotation.z, 0);
hit.transform.rotation = Quaternion.Lerp(oldRotation, newRotation, Time.deltaTime * 0.1f);
}
}
}
}
答案 0 :(得分:2)
问题是您将四元数元素与欧拉角混合。必须使用Quaternion.Euler来构建newRotation
。所以你需要的是:
Vector3 newRotationAngles = oldRotation.eulerAngles;
newRotationAngles.x += 180;
newRotation = Quaternion.Euler (newRotationAngles);