if语句中的EULERANGLE Unity不能正确处理某些值C#
我有一个汽车游戏,只能沿x轴和z轴行驶。 如果汽车开到正z(旋转==0),那么它必须做些什么,如果它开到正x(旋转==90),那么它必须做些其他的事情,依此类推if语句中的EULERANGLE Unity不能正确处理某些值C#,c#,unity3d,transform,euler-angles,C#,Unity3d,Transform,Euler Angles,我有一个汽车游戏,只能沿x轴和z轴行驶。 如果汽车开到正z(旋转==0),那么它必须做些什么,如果它开到正x(旋转==90),那么它必须做些其他的事情,依此类推 if (transform.rotation.eulerAngles.y == 0) { richtung = 0; Debug.Log("north"); } if (transform.rotation.eulerAngles.y == 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");
}
它适用于北部和东部,但南部和西部不适用。即使我用一辆旋转==-180 | | 180的汽车启动程序。
我做错了什么?
谢谢 您需要使用非负值,作为状态,它必须介于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
您需要使用非负值,因为状态必须介于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键来旋转车辆,车辆从RixTou= 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; }
}
}
公共枚举方向{北、东、南、西}
公共方向车辆方向{get{返回(方向)richtung;}
私有int-richtong=0;
无效更新()
{
if(Input.GetKeyDown(KeyCode.A))
{
如果(++richtung==4){richtung==0;}
}
else if(Input.GetKeyDown(KeyCode.D))
{
如果(--richtung<0){richtung==3;}
}
}
现在,您不需要关心旋转,因为现在可以使用richtung的值进行旋转。在其他任何地方,您都可以使用VehicleDirection更明确地指示车辆的行驶方向。由于您只在四个方向上设置车辆,因此可以同时设置更多方向
让我们考虑使用A和D键来旋转车辆,车辆从RixTou= 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; }
}
}
公共枚举方向{北、东、南、西}
公共方向车辆方向{get{返回(方向)richtung;}
私有int-richtong=0;
无效更新()
{
if(Input.GetKeyDown(KeyCode.A))
{
如果(++richtung==4){richtung==0;}
}
else if(Input.GetKeyDown(KeyCode.D))
{
如果(--richtung<0){richtung==3;}
}
}
现在,您不需要关心旋转,因为现在可以使用richtung的值进行旋转。在其他任何地方,您都可以使用车辆方向更明确地指示其前进方向。欧拉角在0到360度之间。因此,当您将其与-180进行比较时,它将始终为假。欧拉角在0到360度之间。因此,当您将其与-180进行比较时,它将始终为false。这不太可能起作用,因为比较两个浮点几乎不起作用(您将使用近似裕度)。
Mathf.approxity()
这不太可能起作用,因为比较两个浮点几乎不起作用(您将使用近似裕度)。Mathf.approximation()
我想你留下了两个答案,都是因为我弄错了我想你留下了两个答案确实是因为我弄错了