You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 16:22:06