gpt4 book ai didi

c# - 统一评分系统的创建

转载 作者:行者123 更新时间:2023-11-30 23:31:22 25 4
gpt4 key购买 nike

我目前正在开发一个简单的 2D 游戏,以学习有关游戏开发的许多知识。

不过,我在创建评分系统时遇到了一些问题。

我想每秒更新一次比分,每秒钟加1分,比赛结束时停止计数。

我开始写这个

public class scoremanager : MonoBehaviour {

public int score;
public GUIText distance;

void Start () {
score = 0;
}

void Update () {
StartCoroutine(updateScoreManager(1f, 1));
distance.text = score.ToString();
}

IEnumerator updateScoreManager(float totalTime, int amount) {
score += amount;
yield return new WaitForSeconds (totalTime);
}
}

问题是 GUIText 中没有显示任何内容,所以我不知道它是否有效。游戏结束后如何停止计数?

最佳答案

首先,我认为您应该使用 uGUI,因为它现在是 Unity 接受的 UI 解决方案:http://blogs.unity3d.com/2014/05/28/overview-of-the-new-ui-system/

我真的不能说你的 GUIText 有什么问题,因为我不知道位置是否关闭或其他什么,但我可以告诉你如何更好地管理计数。

您不需要使用 Update 函数,使用 update 函数违背了使用协程更新文本的目的。使用协程可以让您控制何时开始更新以及何时停止更新。因此,一种解决方案是完全摆脱 Update 函数,以便更好地控制它:

public class scoremanager : MonoBehaviour {

public int score;
public GUIText distance;

private Coroutine scoreCoroutine;

void Start () {
score = 0;
scoreCoroutine = StartCoroutine(updateScoreManager(1f, 1));
}

IEnumerator updateScoreManager(float totalTime, int amount) {
while(true) {
score += amount;
distance.text = score.ToString();
yield return new WaitForSeconds (totalTime);
}
}

// example of ending game
void EndGame() {
StopCoroutine(scoreCoroutine);
scoreCoroutine = null;
}
}

这可能看起来很奇怪(为什么我要使用无限循环)?但这就是协程的美妙之处,您可以编写这样的代码,因为 yield 语句允许您从代码中返回并稍后返回到同一位置。通常 while 循环会导致您的游戏崩溃,但是 yield 语句让您创建一个 time while 循环!

希望这对您有所帮助!

关于c# - 统一评分系统的创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34612672/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com