!= 不能应用于 Vector2 和 Float

问题描述 投票:0回答:2

我试图在我的角色移动时创建一个尘埃粒子,我想到的最好的方法是激活一个在尘埃粒子中生成的方法,但是当我在给出正确的输入时简单地生成它,粒子在我停止移动后继续生成几秒钟。我现在正尝试在我的角色速度不为零时生成它们,但由于标题中所述的错误消息而无法正常工作。

body.velocity = new Vector2(Input.GetAxis("Horizontal") * speed, body.velocity.y);

        if (body.velocity != 0f)
        {
            createDust();
        }

我一直没找到用!=运算符来计算这个的方法,我也试过了

if (body.velocity < 0f | body.velocity > 0f)

但我收到类似的错误消息,说明操作员无法使用。

c# unity3d
2个回答
2
投票
if (!Mathf.Approximately(body.velocity.magnitude, 0f))
{
    // your code here.
    Debug.Log("is not 0");
}

0
投票

错误消息很容易解释:一个

Vector2
2
float
组件=>你不能简单地将它与一个单独的进行比较。

this answer的替代方案(这可能是大多数时候的首选)你也可以做

if(body.velocity != Vector2.zero)
{
     createDust();
}

在哪里

  • Vector2.zero
    new Vector2()
    new Vector2(0, 0)

    的缩写
  • Vector2 != Vector2
    已经包含一个精度为
    1e-5
    的近似值。

    在内部它使用平方幅度。所以它可能或多或少与通过

    magnitude

    一样有效

所以基本上这等于做

if(Mathf.Abs(body.velocity.magnitude) <= 0.00001f)
{

}

等于

if(Mathf.Abs(body.velocity.magnitude) <= Mathf.Epsilon)
{

}

其中 Mathf.Epsilon 是两个

float
可以不同的最小值

© www.soinside.com 2019 - 2024. All rights reserved.