if 语句中的 EulerAngles Unity 不适用于某些值 C#

EulerAngles Unity in if statement does not work proper with some values C#

我有一个赛车游戏,只能沿着x和z轴行驶。 如果汽车开到 positiv z (rotation == 0) 那么它必须做一些事情,如果它开到正 x (rotation == 90) 那么它必须做其他事情,依此类推。

    if (transform.rotation.eulerAngles.y == 0)
    {
        richtung = 0;
        Debug.Log("north");
    }

    if (transform.rotation.eulerAngles.y == 90)
    {
        richtung = 1;
        Debug.Log("east");
    }

    if (transform.rotation.eulerAngles.y == -180 || transform.rotation.y == 180)
    {
        richtung = 2;
        Debug.Log("south");
    }

    if (transform.rotation.eulerAngles.y == -90)
    {
        richtung = 3;
        Debug.Log("west");
    }

它适用于 north 和 east,但不适用于 south 和 west。即使我用旋转的汽车启动程序 == -180 || 180。 我究竟做错了什么? 谢谢!

您需要使用非负值,如 documentation 所述,它必须介于 0 和 360 之间。

if (transform.rotation.eulerAngles.y == 180)
{
    richtung = 2;
    Debug.Log("south");
}

if (transform.rotation.eulerAngles.y == 270)
{
    richtung = 3;
    Debug.Log("west");
}

你的第三种情况几乎是正确的,但不幸的是你使用了 transform.rotation.y 而不是 transform.rotation.eulerAngles.y

正如@Everts 指出的那样,最好将这些值与 "epsilon" 值进行比较,因为 floatdouble 并不完全精确(因为格式在它们存储在内存中)。

Math.Abs(transform.rotation.eulerAngles.y - 180) < 0.001

由于只设置了四个方向的载具,可以同时设置多个。

假设您使用 A 键和 D 键旋转车辆,车辆以 richtung = 0 开始。

public enum Direction { North, East, South, West }
public Direction VehicleDirection{ get{ return (Direction)richtung; } } 
private int richtung = 0;
void Update()
{
    if(Input.GetKeyDown(KeyCode.A))
    {
        if(++richtung == 4){ richtung == 0; }
    }
    else if(Input.GetKeyDown(KeyCode.D))
    {
       if(--richtung < 0){ richtung == 3; }
    }
}

现在您无需关心轮换,因为您现在可以使用 richtung 的值进行轮换。在其他任何地方,您都可以使用 VehicleDirection 来更明确地指示它的前进方向。