Unity协程问题求助:电梯仅抖动上行无法下行,需实现停2秒后下行
问题排查与修复方案
核心问题1:协程被重复启动
当_AccuTime > _RunTime条件满足后,每帧都会调用StartCoroutine("ReversePlatform"),导致同时运行上百个相同协程。2秒后所有协程都会执行speed = -speed,相当于speed被反复取反,电梯自然会抖动,无法持续下行。
核心问题2:缺少_AccuTime的累加逻辑
你的代码里没有在移动时更新_AccuTime,这会导致两种异常情况:
- 如果初始
_AccuTime就大于_RunTime:条件永久成立,持续启动协程,直接触发抖动问题; - 如果初始
_AccuTime小于_RunTime:条件永远不成立,协程永远不会启动,电梯只会一直上行。
修复后的代码示例
协程代码(新增锁标记避免重复启动)
// 新增标记,防止同一时间启动多个反转协程 private bool isCoroutineRunning = false; private IEnumerator ReversePlatform() { isCoroutineRunning = true; yield return new WaitForSeconds(2); _AccuTime = 0; speed = -speed; isCoroutineRunning = false; }
调用逻辑代码(补全时间累加+锁判断)
if (_AccuTime > _RunTime && !isCoroutineRunning) { StartCoroutine(ReversePlatform()); } else { transform.Translate(0, speed * Time.deltaTime, 0); // 移动过程中累加时间,保证到达运行时长后触发反转逻辑 _AccuTime += Time.deltaTime; }
额外优化说明
- 用
StartCoroutine(ReversePlatform())代替字符串调用,类型更安全,也更易维护; isCoroutineRunning标记确保同一时间只有一个反转协程在运行,彻底避免speed被反复取反;- 新增
_AccuTime += Time.deltaTime让时间累计逻辑完整,保证电梯运行指定时长后才触发停留反转。
内容的提问来源于stack exchange,提问作者Siro
相关产品推荐
相关产品推荐

