unity3d 除了0以外,最短的WaitForSeconds时间是多少?

uoifb46i  于 2022-11-15  发布在  其他
关注(0)|答案(2)|浏览(208)

使用yield return new WaitForSeconds(waitTime);
在IEnumerator中,除了0之外,最短的等待时间是多少?我尝试过使用浮点数,并尝试将waitTime设置为低至0.00001f,但我不确定是否存在限制?
我的目的是让玩家的硬币一次加一个单位,所以计时器是“满的”而不是即时的。我试着搜索,但我似乎找不到WaitForSeconds的最短限制是什么的答案,所以如果有人知道我会非常感谢这个答案。
此外,我的代码如下,如果任何人有任何输入,我可以加快这一过程,而不使它即时,因为它只是不够快,玩家不得不坐了一会儿等待硬币被添加到米在游戏结束.

IEnumerator AddCoins()
{
    yield return new WaitForSeconds(1);

    while (userGainedCoins > 0)
    {
        if (addingSoundPlaying == false)
        {
            addingSound.Play();
            addingSoundPlaying = true;
        }

        if (userGainedCoins == 1)
        {
            addingSound.Stop();
        }

        userCoins += 1;
        userGainedCoins -= 1;
        PlayerPrefs.SetInt("User Coins", userCoins);
        yield return new WaitForSeconds(waitTime);
    }

    addingSoundPlaying = false;
}
von4xj4u

von4xj4u1#

“我觉得它没有最低时间限制,就是等到一定的数量再等,如果愿意的话,可以一次加多个币,我一般都尽量不去折腾这种东西,与其折腾币,我只会弄乱它显示的值。你可以有一个脚本,保存硬币的数量,并根据时间步增加/减少它。大概是这样的:

public int coins = 100;
public int displayedCoins = 0;

private void Update() {
    int change = Mathf.CeilToInt(300 * Time.deltaTime);
    if (displayedCoins < coins)
        displayedCoins = Math.Min(displayedCoins + change, coins);
    else
        displayedCoins = Math.Max(displayedCoins - change, coins);
}

你可以直接设置金额,然后忘记它,它可以处理获得和失去的硬币。你也可以把change值改为int change = Mathf.CeilToInt(Mathf.Abs(coins - displayCoins) * Time.deltaTime),使它有一个缓和的效果,或者你想要的任何东西。(我没有测试这段代码。)

scyqe7ek

scyqe7ek2#

@JeffRSon在评论中提供了这一声明,我相信这回答了我的问题:
“由于协程的性质,这应该取决于实际的帧速率,这也意味着最短的时间可能。”

相关问题