【问题标题】:Unity without using Update不使用更新的统一
【发布时间】:2019-09-26 15:05:35
【问题描述】:

我目前正在开发一款涉及玩家猜测的小游戏。玩家还可以使用特殊卡片,例如,显示一个字母/添加他/她的猜测时间等。游戏分为两个场景-> 一个是商店、库存、玩家资料等,第二个是严格猜测。 目前,几乎所有内容都在第二个场景的更新中运行,但我真的很讨厌它。我试图将所有内容重写为协程,但问题是在 IEnumerator 中使用卡片似乎是不可能的(或者我做错了什么?)。 例如,一个简单的倒计时。如果它在更新中,我可以很容易地使用卡片来影响时间(例如增加 30 秒)。在 IEnumerator 的情况下,我不能(或者可能更好,我不知道该怎么做)。

int secondsForGuess = 30;

 IEnumerator Countdown () {
     int counter = secondsForGuess;
     while (counter > 0) {
         yield return new WaitForSeconds (1);
         counter--;
     }
 }

任何一般性建议如何在不使用更新的情况下执行此操作将不胜感激:D

【问题讨论】:

  • 您可以为上下文添加更多代码吗?你在哪里以及如何启动协程?
  • 你为什么不想使用更新?您可以使用Datetime.Now 来检查时间,而无需使用太多资源。在开始时设置一个初始时间,然后检查更新中的时间差是否超过您给的时间限制。
  • 如果你 yield return null; 你继续执行下一帧。我不明白你的更新问题是什么。
  • 我担心游戏会占用太多资源,以防我会在更新中做所有事情:) 基本上是我的第一个 Android 游戏。

标签: android unity3d


【解决方案1】:

如果我正确理解您的问题,您希望能够从例程之外增加计数器。因此,只需将其设为类中的一个字段,以便任何人都可以增加或减少它:

const int secondsForGuess = 30;
private int counter;

public void AddToCounter(int seconds)
{
    counter += seconds;
}

private IEnumerator Countdown () 
{
     counter = secondsForGuess;
     while (counter > 0) {
         yield return new WaitForSeconds (1);
         counter--;
     }

     // Do something when finsihed
 }

也以防万一:确保在某个地方使用 StartCoroutine 启动例程。

【讨论】:

  • 这正是我想做的,一定会去看看。谢谢你的好建议!
猜你喜欢
  • 2017-06-20
  • 2011-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多