我试图在我的角色移动时创建一个尘埃粒子,我想到的最好的方法是激活一个在尘埃粒子中生成的方法,但是当我在给出正确的输入时简单地生成它,粒子在我停止移动后继续生成几秒钟。我现在正尝试在我的角色速度不为零时生成它们,但由于标题中所述的错误消息而无法正常工作。
body.velocity = new Vector2(Input.GetAxis("Horizontal") * speed, body.velocity.y);
if (body.velocity != 0f)
{
createDust();
}
我一直没找到用!=运算符来计算这个的方法,我也试过了
if (body.velocity < 0f | body.velocity > 0f)
但我收到类似的错误消息,说明操作员无法使用。
if (!Mathf.Approximately(body.velocity.magnitude, 0f))
{
// your code here.
Debug.Log("is not 0");
}
错误消息很容易解释:一个
Vector2
由2float
组件=>你不能简单地将它与一个单独的进行比较。
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
可以不同的最小值