我需要为我的比赛制作一个得分计数器。 它部分起作用,每当立方体达到(x)11时,分数上升,并且该块将被重置为它在(x)12处的开始位置。 问题是,无论何时立方体达到(x)11,它将继续计数+1直到(x)12,当它被重置时,得分大多数时间约为36。 它一直这样做,我不知道我做错了什么,完全在noobie这里。 这是我的代码:
void Start () {
beginPositie = new Vector3 (-4, 0, 0);
transform.position = beginPositie;
score = 0;
}
void Update () {
snelheid = Random.Range (2, 5);
transform.Translate (snelheid * Time.deltaTime, 0, 0);
if(gameObject.transform.position.x>= 12){
transform.position = beginPositie;
}
}
void OnGUI() {
if (gameObject.transform.position.x == 11) {
score = score + 1;
}
GUI.skin = textSkin;
GUI.Label (new Rect (10, 10, 300, 100), "Score: " + score);
}
答案 0 :(得分:0)
你有两个选择:你可以存储一个布尔值,如果你已经增加了这个周期的得分,并在重置立方体位置时重置它:
bool countedThisCycle; // What you use to determine if you have scored this cycle.
void Start () {
beginPositie = new Vector3 (-4, 0, 0);
transform.position = beginPositie;
score = 0;
countedThisCycle = false; // Make sure you count the first one.
}
void Update () {
snelheid = Random.Range (2, 5);
transform.Translate (snelheid * Time.deltaTime, 0, 0);
if(gameObject.transform.position.x>= 12){
transform.position = beginPositie;
countedThisCycle = false; // Make sure you can count the next one.
}
}
void OnGUI() {
if (gameObject.transform.position.x == 11 && !countedThisCycle) { // Check that you haven't counted this one.
score = score + 1;
countedThisCycle = true; // Make sure you don't count it again.
}
GUI.skin = textSkin;
GUI.Label (new Rect (10, 10, 300, 100), "Score: " + score);
}
你编程的其他选项更正确,就是在你进行重置时计算,但这可能比你达到11时的计数目的要好。
答案 1 :(得分:0)
这导致了问题:
if (gameObject.transform.position.x == 11)
不要将浮点数与=
进行比较,因为永远无法保证gameObject.transform.position.x
的值完全为11
。
那应该改为:
if (gameObject.transform.position.x >= 11)
另一个不相关的问题是OnGUI()
。不要使用它。使用新的Unity UI。
答案 2 :(得分:0)
即使您已经解决了问题,我想我可以帮助您了解问题所在。
我们不知道调用update()
和OnGUI()
的频率。 OnGUI()
比Update()
更频繁地被调用是非常合理的。这将使调用堆看起来像这样:
Update();
OnGUI();
OnGUI();
OnGUI();
OnGUI();
OnGUI();
Update();
OnGUI();
OnGUI();
OnGUI();
OnGUI();
OnGUI();
现在,如果您的Update()
重新计算并评估排名为11,那么您的OnGUI
将会看到11并更新您的分数。由于更频繁地调用OnGUI
,因此在我的示例中会持续看到11. 5次,导致您的分数在下一个Update()
发生之前连续提高5次。
我的建议是将所有与游戏逻辑方法相关的游戏逻辑与UI相关方法中的所有UI相关联。避免混合它们!