【发布时间】:2019-08-26 11:06:49
【问题描述】:
我的协程在玩家死后淡出玩家,
// Fade out ragdoll
IEnumerator RagdollFade()
{
yield return new WaitForSeconds(3f);
while (startingColour.a > 0.0f)
{
headSR.color = new Color(headSR.color.r, headSR.color.g, headSR.color.b, headSR.color.a - (Time.deltaTime / 1.5f));
bodySR.color = new Color(bodySR.color.r, bodySR.color.g, bodySR.color.b, bodySR.color.a - (Time.deltaTime / 1.5f));
leftArmSR.color = new Color(leftArmSR.color.r, leftArmSR.color.g, leftArmSR.color.b, leftArmSR.color.a - (Time.deltaTime / 1.5f));
rightArmSR.color = new Color(rightArmSR.color.r, rightArmSR.color.g, rightArmSR.color.b, rightArmSR.color.a - (Time.deltaTime / 1.5f));
leftLegSR.color = new Color(leftLegSR.color.r, leftLegSR.color.g, leftLegSR.color.b, leftLegSR.color.a - (Time.deltaTime / 1.5f));
rightLegSR.color = new Color(rightLegSR.color.r, rightLegSR.color.g, rightLegSR.color.b, rightLegSR.color.a - (Time.deltaTime / 1.5f));
yield return null;
}
}
每次执行后都会加快速度。
例如,第一次调用协程时一切正常,3 秒后播放器淡出。但是,下一次它被称为 3 秒在淡入淡出之前不要过去,下一次更短的时间等等。
startingColour 在 Start() 函数中设置。
【问题讨论】:
-
你永远不会修改
startingColour.a,所以你永远不会离开while循环? -
@LudovicFeltz 措辞不佳,我确实改变了它 - 起始值在 start 函数中设置
-
你确定要离开while循环吗?
-
它应该做什么?
startingColour.a是否在其他任何地方更改?否则你不能简单地使用while(true)吗?headSR.color等在哪里重置?我的意思是,一旦您将它们淡出.. 停留会淡出吗?在这种情况下,第二次更快并不奇怪。正如@LudovicFeltz 所说,您可能永远不会离开 while 循环?因此,当您再次调用StartCoroutine时,您将运行两个并发例程 -
@derHugo 基本上,当玩家死亡时,我希望他们的身体消失。因为它们是布娃娃,所以我必须淡出每个部分(即头部、身体等)。
while true是一种更简单的写法,我的错。我曾尝试在此协程结束时和调用之前重置headSR.color,但没有任何变化。headSR.color = startingColour;