Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
if语句中的EULERANGLE Unity不能正确处理某些值C#_C#_Unity3d_Transform_Euler Angles - Fatal编程技术网

if语句中的EULERANGLE Unity不能正确处理某些值C#

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) {

我有一个汽车游戏,只能沿x轴和z轴行驶。 如果汽车开到正z(旋转==0),那么它必须做些什么,如果它开到正x(旋转==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()
我想你留下了两个答案,都是因为我弄错了我想你留下了两个答案确实是因为我弄错了