我在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的符号正在改变。我是否犯了一些明显的错误?
答案 0 :(得分:3)
您可能希望在更改右侧之前采用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);