簡體   English   中英

C#得分計數器{Unity3D}

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM