为什么Unity中Mathf.Sign(0)返回1而非C#文档规定的0?
Unity中
Mathf.Sign(0)返回1的原因 Unity的Mathf.Sign是引擎独立实现的工具方法,和C#原生的System.Math.Sign实现逻辑不同,不属于运行bug。
两者的规则差异如下:
- C#官方定义的
System.Math.Sign逻辑:参数为正数返回1,负数返回-1,参数为0时返回0,和你查到的官方文档描述一致。 - Unity官方定义的
Mathf.Sign逻辑:参数大于等于0时返回1,参数小于0时返回-1,因此传入0时返回1是预期行为。
你给出的测试结果完全符合Unity的设计逻辑:
Mathf.Sign(0.3); // 1 Mathf.Sign(-0.3); // -1 Mathf.Sign(0); // 1
如果你的业务逻辑需要0返回0的判断逻辑,可以选择两种方案实现:
- 直接调用C#原生的
System.Math.Sign方法 - 自行封装判断逻辑,示例如下:
public static int CustomSign(float value) { if (value > 0) return 1; if (value < 0) return -1; return 0; }
内容的提问来源于stack exchange,提问作者Magnesium
相关产品推荐
相关产品推荐

