0

目標:私は 3 d ボタンを持っています。クリックするたびに、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);
            }
        }
    }
}
4

1 に答える 1

2

問題は、四元数要素とオイラー角を混在させることです。の構築はQuaternion.EulernewRotationを使用して行う必要があります。したがって、必要なものは次のとおりです。

Vector3 newRotationAngles = oldRotation.eulerAngles;
newRotationAngles.x += 180;
newRotation = Quaternion.Euler (newRotationAngles);
于 2013-09-15T11:29:08.980 に答える