如何知道旋转方向

时间:2019-02-08 11:25:44

标签: unity3d

我正在制作一个游戏,玩家可以将平面对象旋转到任何方向或翻转它或其他任何东西

我还想在四个侧面上显示四个文本,以显示每个侧面的旋转量(请参阅图片以获得更好的主意)

idea about the game

这是用于旋转并显示旋转的代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class main_code : MonoBehaviour
{
public Text show_right_rotation;
public Text show_left_rotation;
public Text show_up_rotation;
public Text show_down_rotation;

void Start()
{

}

void Update()
{
    if ((int)transform.eulerAngles.z >= 180 && (int)transform.eulerAngles.z <= 360)
    {
        show_right_rotation.text = (360 - ((int)transform.eulerAngles.z)).ToString();
    }
    else if ((int)transform.eulerAngles.z <= 180 && (int)transform.eulerAngles.z >= 0)
    {
        show_left_rotation.text = ((int)transform.eulerAngles.z).ToString();
    }

    if ((int)transform.eulerAngles.x >= 0 && (int)transform.eulerAngles.x <= 90)
    {
        show_up_rotation.text = ((int)transform.eulerAngles.x).ToString();
    }
    else if ((int)transform.eulerAngles.x <= 360 && (int)transform.eulerAngles.x >= 270)
    {
        show_down_rotation.text = (360 - ((int)transform.eulerAngles.x)).ToString();
    }

    if (Input.GetKey(KeyCode.DownArrow))
    {
        transform.Rotate(new Vector3(-1, 0, 0), Space.World);
    }
    else if (Input.GetKey(KeyCode.UpArrow))
    {
        transform.Rotate(new Vector3(1, 0, 0), Space.World);
    }

    if (Input.GetKey(KeyCode.LeftArrow))
    {
        transform.Rotate(new Vector3(0, 0, 1), Space.World);
    }
    else if (Input.GetKey(KeyCode.RightArrow))
    {
        transform.Rotate(new Vector3(0, 0, -1), Space.World);
    }

    if (Input.GetKey(KeyCode.Space))
    {
        transform.Rotate(new Vector3(0, 1, 0), Space.World);
    }
}
}

现在,如果我在y轴为0的情况下单击向右箭头,则平面将正确旋转,并且我可以使用transform.eulerAngles值来知道向哪个方向旋转以及旋转值,如您所见,表明平面已旋转右侧72度

the correct result

问题是,如果平面y轴不再为0,那么transform.eulerAngles值将变得无用,正如您在图像中所看到的那样,它显示它向右旋转了44,向上旋转了33,而不是向上旋转< / p>

the wrong result

那么不管y轴值如何,我如何显示每侧的旋转量?

0 个答案:

没有答案