使用lerp增加对象的旋转

时间:2013-09-15 10:44:11

标签: c# unity3d

目标:我有一个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);
            }
        }
    }
}

1 个答案:

答案 0 :(得分:2)

问题是您将四元数元素与欧拉角混合。必须使用Quaternion.Euler来构建newRotation。所以你需要的是:

Vector3 newRotationAngles = oldRotation.eulerAngles;
newRotationAngles.x += 180;
newRotation = Quaternion.Euler (newRotationAngles);