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" 值进行比较,因为 float
和 double
并不完全精确(因为格式在它们存储在内存中)。
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 来更明确地指示它的前进方向。
我有一个赛车游戏,只能沿着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" 值进行比较,因为 float
和 double
并不完全精确(因为格式在它们存储在内存中)。
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 来更明确地指示它的前进方向。