【问题标题】:Decreasing a Timer every Second, both integers are decreasing每秒减少一个计时器,两个整数都在减少
【发布时间】:2016-05-26 11:53:12
【问题描述】:

我试图在我的游戏中实现一个评分系统。我有两个变量,

public int maxScore; 
public int currentScore;

要设置 currentScore,我得到 maxScore 并将其放入 currentScore:

currentScore = maxScore;

因此,如果玩家开始游戏,他将获得最大的分数。如果他现在要放慢速度,我会降低 currentPoints per Second with

IEnumerator CurrentScore()
{
        currentScore -= 1;
        yield return new WaitForSeconds(5); //I'm using 5, because 1 does not equals a second
}

并通过说来调用它

StartCoroutine(CurrentScore());

如果我现在查看游戏,一切看起来都很好:

游戏开始时,两者都在 3000:

如果计时器运行到特定值,则 currentScore 减少,但 MaxScore 保持不变。应该这样:

然而,一旦 WinScreen PopsUp,两个值都开始迅速下降,而不是只有一个下降:

我已将此脚本附加到显示当前(已获得)积分和可能积分的文本中:

using UnityEngine;
using UnityEngine.UI;

public class WinScreenScore : MonoBehaviour {
    //Load the classes
    public GameManager manager;
    //To get our Text
    //public GameObject scoreText;
    Text max;
    Text current;
    //As soon as the Thread awakes, load the Text
    void Awake()
    {
        max = GetComponent<Text>();
        max.text = manager.maxScore.ToString();
    }
    void Update()
    {
        current = GetComponent<Text>();
        current.text = manager.currentScore.ToString();
    }
}

在显示当前分数(获得积分)的文本上编写脚本:

关于可能的点:

我不明白为什么在显示 Winscreen 后两个值都迅速下降。

感谢您的帮助!

【问题讨论】:

  • 所以你从不分配maxScore ?
  • 你从哪里开始协程?
  • @gjttt1来自与协程相同的类,我的 GameManager.cs
  • 我在 WinScreenScore 中分配了我的 maxScore void Awake() (我帖子中第一张图片下的代码)@ThomasAyoub
  • 也许我不清楚,问题是你何时/在哪里为maxScore赋值?

标签: c# unity3d unity5


【解决方案1】:

WinScreenScore 在两个文本对象上运行。 在 Update 方法中,您获取 Text 组件并将其设置为当前分数。因此,对于您的最高分数,这正在发生。 awake 获取文本组件并将文本设置为来自游戏管理器的最大分数。然后在更新中,将 THE SAME 文本组件设置为当前乐谱。基本上,您正在使用相同的文本组件填充 max 和 current。解决方案:创建对包含文本组件的游戏对象的公共引用,然后获取两个单独的文本。该脚本不需要在两个对象上运行。

代码示例:

public GameManager manager;
public GameObject max, achieved;
Text currentText, maxText;
void Start()
{
    currentText = achieved.GetComponent<Text>();
    maxText = max.GetComponent<Text>();
    maxText.text = manager.maxScore.ToString();
}
//Since the current Score needs to be updated
void FixedUpdate()
{
    currentText.text = manager.currentScore.ToString();
}

现在您可以独立设置电流和最大值。在 Update 中使用 GetComponent 也是一个坏主意,因为它是一个繁重的操作。尝试只在运行一次的地方使用。

【讨论】:

  • 你能发布一个关于如何get the two separate Texts 的代码示例吗?我使用public WinScreenScore EarnedScore; public WinScreenScore MaxScore; 创建了引用
  • @DanielKng 我更新了我的答案。您想要获取包含文本组件的游戏对象,而不是在游戏对象上运行的脚本实例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-11
  • 2014-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多