C# 使用协同程序或更新来减慢动画的速度
我想做什么C# 使用协同程序或更新来减慢动画的速度,c#,unity3d,C#,Unity3d,我想做什么 当汽车与另一辆汽车碰撞时,逐渐停止汽车动画 当汽车退出碰撞器时,逐渐加速汽车动画 我有两种方法来实现这件事(意思是运行我的逻辑) 更新 共同例行程序 对于协同程序,我使用了这个 IEnumerator IncreaseSpeedGradually1(AnimationControlSpeed lastGOHitScript) { //stop if decrease speed in progress StopCoroutine("DecreaseSpeedGradu
IEnumerator IncreaseSpeedGradually1(AnimationControlSpeed lastGOHitScript)
{
//stop if decrease speed in progress
StopCoroutine("DecreaseSpeedGradually");
float decrementValue = ((lastHitVehicleSpeed / 2) * 2);
while (lastGOHitScript.Speed <= lastHitVehicleSpeed)
{
lastGOHitScript.Speed += decrementValue * Time.deltaTime;
yield return 0;
}
//setting speed to the last speed
lastGOHitScript.Speed = lastGOHitScript.iniSpeeed;
}
这两种方法我都知道,但我想问的是,哪一种是做这项工作的正确方法?降低动画速度从而达到我的目标?我想corroutine稍后可能会在我的游戏中出现问题,性能问题是什么?不太清楚你的目标到底是什么。您描述的内容很清楚,但是您发布的两个代码片段做了完全不同的事情。但是,基本上,对于这么小的东西,我会使用Update(),因为如果出现问题,那么调试就更容易了,而且从理论上讲,您的代码中没有任何东西希望“线程化”/“侧任务化”(协程基本上是为了:做点什么-很可能是侧任务-异步)。
作为补充说明,Update()中的代码可以进行一些优化,因此看起来如下所示:
if (carAnimState == carAnimationState.starting) {
carAnimState = carAnimationState.running;
} else if (carAnimState == carAnimationState.stoping) {
carAnimState = carAnimationState.running;
} //this way the 2nd "if" won't be unnecessarily evaluated when animstate was .starting
我还要添加一个方法,并从Update()调用它。预编译器很可能会将其内联(不能在Unity中强制)并且您的代码更可读。与更新相比,协同程序看起来更高效,因为更新需要布尔值或状态,这将持续检查,并且它可以提高性能overhead@MohammadFaizanKhan处理能力就是处理能力。无论Update()是否有效,或者是否从这一方面进行协同工作,都无关紧要,尤其是当工作必须一次性完成时。协同程序的功能在于“异步”,也就是说,无论它们做什么操作,都可以在帧之间“分割”(“yield”命令)。顺便说一句,如果不使用该值,您不需要返回任何内容(可以只返回“yield;”),在这种情况下,您也不必添加“IEnumerator”。
if (carAnimState == carAnimationState.starting) {
carAnimState = carAnimationState.running;
} else if (carAnimState == carAnimationState.stoping) {
carAnimState = carAnimationState.running;
} //this way the 2nd "if" won't be unnecessarily evaluated when animstate was .starting