[英]C# Score Counter {Unity3D}
我需要為我的游戲計分。 每當多維數據集達到(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);
}
您有兩個選擇:如果您在此循環中提高了分數,則可以將其存儲在布爾值中,並在重置多維數據集位置時將其重置:
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時,這可能會超過計數的目的。
這導致了問題:
if (gameObject.transform.position.x == 11)
不要將浮點數與=
進行比較,因為永遠不能保證gameObject.transform.position.x
的值將恰好為11
。
應將b更改為:
if (gameObject.transform.position.x >= 11)
另一個不相關的問題是OnGUI()
。 不要使用它。 使用新的Unity UI 。
即使您已經解決了問題,我想我也可以幫助您了解問題所在。
我們不知道update()
和OnGUI()
的調用頻率。 似乎比Update()
更頻繁地調用OnGUI()
是很合理的。 這會使調用堆棧看起來像這樣:
Update();
OnGUI();
OnGUI();
OnGUI();
OnGUI();
OnGUI();
Update();
OnGUI();
OnGUI();
OnGUI();
OnGUI();
OnGUI();
現在,如果您的Update()
重新計算並將位置評估為11,則OnGUI
將看到11並更新您的得分。 由於OnGUI
的調用頻率更高,因此在我的示例中將不斷看到11。5倍,導致您的分數在下一次Update()
發生之前連續提高5倍。
我的建議是保持與游戲邏輯方法相關的所有游戲邏輯,以及與UI相關的方法中相關的所有UI。 避免混合它們!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.