c#Yield WaitForSeconds或Time.Deltatime

时间:2016-01-29 17:48:38

标签: c#

我正在使用c#在Unity 5中制作游戏,我想知道Yield与Time.Deltatime。让我们说" Money"应该通过" x"每一秒,我应该使用

x[0]={}, x[1]={}

或只是使用

yield return new WaitForSeconds(1);

2 个答案:

答案 0 :(得分:1)

Money += moneyModifier * Time.Deltatime;必须按照您想要的方式调用每个帧,因为Time.Deltatime仅提供自绘制最后一帧以来已经过去的时间。 (即,它必须放在Update()中,并且每帧都必须调用。不是非常有利于资源。)

这种方法更适合作为协程实现。

public int Money;

public IEnumerator IncreaseMoney(int amount, float interval) 
{
     while(true)
     {
          Money += amount;
          yield return new WaitForSeconds(interval);   
     }
}

//somewhere within this class
void Start() 
{
   //Start increasing the money by 50 every 2 seconds
   StartCoroutine(IncreaseMoney(50, 2.0)); 
}

答案 1 :(得分:1)

你的第一个解决方案是每秒增加一次角色的钱,比如时钟的秒针。

假设您在游戏循环的update逻辑中运行它,那么Time.Deltatime的解决方案会不断增加玩家的资金,同样 1 金额每秒
(想想 Sim City / 城市中的金钱:Skylines 英雄联盟中的金币

如果你想让玩家的钱不断增加(比如经济战略游戏),那就选择第二种解决方案,如果你想让它每秒保持不变并且在两者之间上升一定的数量,那就去吧第一个解决方案。

[1] 的数量并不完全相同,因为WaitForSeconds(1)最有可能等待至少 1秒,有时甚至会超过几毫秒。