C#条件未触发

C#条件未触发,c#,unity3d,C#,Unity3d,我在Unity中遇到了一个(可能是愚蠢的)初学者问题 我在Update中为一个附在轨道行星上的脚本编写了以下代码: Debug.Log(this.transform.position.x); if (!Math.Sign(this.transform.position.x).Equals(Math.Sign(lastx)) { Debug.Log("Bang!"); } this.transform.RotateAround(Vector3.zero, Vector3.up, OrbitSp

我在Unity中遇到了一个(可能是愚蠢的)初学者问题

我在
Update
中为一个附在轨道行星上的脚本编写了以下代码:

Debug.Log(this.transform.position.x);
if (!Math.Sign(this.transform.position.x).Equals(Math.Sign(lastx)) {
  Debug.Log("Bang!");
}
this.transform.RotateAround(Vector3.zero, Vector3.up, OrbitSpeed * Time.deltaTime);
lastx = this.transform.position.x;
条件显然从未触发。它应该在球体穿过y=0轴时触发;阿卡,标志变了


但是,调试日志输出确认X的符号正在更改。我是否犯了一些明显的错误?

在更改右手侧之前,您可能需要取
lastx=this.transform.position.x
。现在,当您进行比较时,
lastx
始终等于
this.transform.position.x

此外,不需要使用
.Equals()
。只要使用
=

Debug.Log(this.transform.position.x);
if (Math.Sign(this.transform.position.x) != Math.Sign(lastx) {
  Debug.Log("Bang!");
}
lastx = this.transform.position.x;
this.transform.RotateAround(Vector3.zero, Vector3.up, OrbitSpeed * Time.deltaTime);

用于此
if(Mathf.approxist(this.transform.position.x,lastx))
..@Programmer不,他没有比较这两个值;他正在比较这两种价值观的标志。(见我的答案。)是的,我错过了
数学符号路径。这就是解决方案。我担心Java ish==对象比较问题,但这不是罪魁祸首。与Java不同,C#具有运算符重载。您甚至可以对字符串(以及许多其他类型)使用
=