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