无法将!=运算符应用于Vector2与Float类型操作数的问题排查
解决Unity中Vector2与标量比较的报错问题
你遇到的核心问题是:body.velocity是Vector2类型的二维向量,而0f是浮点标量,C#不允许直接对向量和标量做相等、大小这类比较运算,所以才会出现运算符无法使用的错误。
正确的实现方式
根据你的需求(角色左右移动时生成尘埃),可以针对水平方向的速度做判断,同时考虑浮点精度问题(避免因Input.GetAxis的平滑值导致误判):
body.velocity = new Vector2(Input.GetAxis("Horizontal") * speed, body.velocity.y); // 检查水平速度的绝对值是否大于极小值,判断是否在移动 if (Mathf.Abs(body.velocity.x) > 0.01f) { createDust(); }
如果需要判断角色是否有任何方向的移动(比如包含上下移动),可以用向量的平方长度(sqrMagnitude,比magnitude性能更好,无需开方运算)来判断:
if (body.velocity.sqrMagnitude > 0.0001f) { createDust(); }
为什么之前的写法不行
body.velocity != 0f:Vector2是向量,0f是标量,类型不匹配,无法直接比较。body.velocity < 0f | body.velocity > 0f:同样是向量和标量做大小比较,C#没有定义这类运算符,因此报错。
内容的提问来源于stack exchange,提问作者William Sault
相关产品推荐
相关产品推荐

