C# 顺利、快速的合作?

C# 顺利、快速的合作?,c#,unity3d,C#,Unity3d,因此,在我的游戏中,我有很多协同程序运行/工作良好 然而,其中一个是功率表,这里的问题是 你按下按钮,电能表将使用协同程序开始填充电能表。(由红色面板的宽度表示) 我们的目标是让电表充满足够快,因为你不能每次都“充满电”。然而,它也必须是平滑的,并且看起来很漂亮 我面临的问题是,我的合作项目速度太快了,不能再快了,而且计价器移动太慢了。所以为了“加速”米,我必须在红色面板上使用更大的宽度增量 它是有效的,但是,这会导致两个问题 它看起来不光滑。(看起来波涛汹涌、紧张不安) 它遗漏了一大堆价值观/

因此,在我的游戏中,我有很多协同程序运行/工作良好

然而,其中一个是功率表,这里的问题是

你按下按钮,电能表将使用协同程序开始填充电能表。(由红色面板的宽度表示)

我们的目标是让电表充满足够快,因为你不能每次都“充满电”。然而,它也必须是平滑的,并且看起来很漂亮

我面临的问题是,我的合作项目速度太快了,不能再快了,而且计价器移动太慢了。所以为了“加速”米,我必须在红色面板上使用更大的宽度增量

它是有效的,但是,这会导致两个问题

  • 它看起来不光滑。(看起来波涛汹涌、紧张不安)
  • 它遗漏了一大堆价值观/可能性。(例如,杆必须增加一个“50”的单位,以使其足够快而变得困难。但这是愚蠢的,因为在停止计时时,只有12种可能性。可能会有多达600种!)
  • 以前有人面对过这种情况吗?如果是这样的话,那么制造一个快速但平滑的电能表的最佳方法是什么,它仍然可以达到各种各样的价值可能性

    谢谢, 本

    这是我的密码:

    public static IEnumerator StartPitchMeter(Player.Guy guy, float duration)
    {
    
        var dur = 0.01f;
    
        do
        {
            yield return new WaitForSeconds(dur);
    
            PlayerControls.PitchMeter += 50f;
    
            if (PlayerControls.PitchMeter > 600) PlayerControls.PitchMeter = 0f;
    
            PlayerControls.pitchMeter.sizeDelta = new Vector2(PlayerControls.PitchMeter, 50);
    
        } while (!PlayerControls.stopPitch);
    
    }
    

    如果您使用协同程序为图形目的更新某些内容,则需要在每个可用渲染帧上进行更新(与调用
    update
    方法的频率相同)。因此,不要等待设定的时间,而是使用
    yield return null
    ,然后根据
    time.deltaTime
    移动仪表,即从最后一帧开始经过的时间(以秒为单位)。在这种情况下,您可以将
    Time.deltaTime
    乘以您希望仪表每秒填充的单位数:

    public static IEnumerator StartPitchMeter(Player.Guy guy, float duration)
    {
    
        do
        {
            yield return null;
    
            // Fill 50 units per second.
            float fillThisFrame = Time.deltaTime * 50f;
    
            PlayerControls.PitchMeter += fillThisFrame;
    
            if (PlayerControls.PitchMeter > 600) PlayerControls.PitchMeter = 0f;
    
    
            PlayerControls.pitchMeter.sizeDelta = new Vector2(PlayerControls.PitchMeter, 50);
            // Not sure what the 50 is doing here so it might be this instead:
            // PlayerControls.pitchMeter.sizeDelta = new Vector2(PlayerControls.PitchMeter, fillThisFrame);
    
        } while (!PlayerControls.stopPitch);
    
    }
    

    发布功率计协同程序的代码。游戏渲染的帧速率是多少?我相信我是以标准帧速率运行的?我对帧率了解不多。把时间表弄乱是个好主意吗?谢谢!我使用协同程序是因为我希望它是一致的。(无论计算机有多快)如果我在那里疯了,请告诉我。@Penjimon除此之外,您还可以查看Mathf.SmoothDamp的脚本参考。它应该有助于解决您的抖动问题。@Penjimon的一致性是通过每帧更新(通常使用
    yield return null
    )和根据最后一次处理的时间调整动画(使用
    Time.deltaTime
    )的组合来实现的。Penjimon这个答案不能解决您的口吃问题吗?我不知道该如何看待你的工作comment@Ruzihm是的,答案尽可能接近于解决问题,但仍然比我希望的慢。至于我的评论,“沉浸式”很接近,因为计算机的速度都不一样,你必须使用Time.DeltaTime,否则所有不同的机器的速度都不一致。这就是我最初的“时间黑客”试图阻止的。