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

Unity中如何正确使用IEnumerator?移动延迟功能失效排查

问题分析与解决

你当前的代码存在两个核心问题导致延迟不生效:

  1. 启动协程后立刻执行了移动代码,协程的等待逻辑不会阻塞当前Update帧的操作,所以移动是瞬间完成的,延迟根本没作用在移动上。
  2. 上箭头用了Input.GetKey(持续检测按键按住状态),会在每帧触发移动,即使协程在等待,Update依然会不断执行移动逻辑。

修正方案

添加一个布尔变量控制移动状态,同时把移动+延迟的逻辑完整放到协程里,确保只有在允许移动时才响应按键,且移动后等待再解锁下一次移动:

using System.Collections;
using UnityEngine;

public class Movement : MonoBehaviour
{
    // 控制是否允许触发下一次移动
    private bool canMove = true;
    // 移动延迟时间,可在Inspector面板调整
    public float moveDelay = 1f;

    void Start()
    {
        transform.position = new Vector3(0, 0, 0);
    }

    void Update()
    {
        CalculateMovement();
    }

    void CalculateMovement() 
    {
        // 只有允许移动时才响应按键
        if (!canMove) return;

        if (Input.GetKeyDown(KeyCode.UpArrow) && transform.position.y != 4)
        {
            StartCoroutine(MoveWithDelay(new Vector3(0, 1, 0)));
        }
        else if (Input.GetKeyDown(KeyCode.DownArrow) && transform.position.y != -4)
        {
            StartCoroutine(MoveWithDelay(new Vector3(0, -1, 0)));
        }
        else if (Input.GetKeyDown(KeyCode.RightArrow) && transform.position.x != 4)
        {
            StartCoroutine(MoveWithDelay(new Vector3(1, 0, 0)));
        }
        else if (Input.GetKeyDown(KeyCode.LeftArrow) && transform.position.x != -4)
        {
            StartCoroutine(MoveWithDelay(new Vector3(-1, 0, 0)));
        }
    }

    private IEnumerator MoveWithDelay(Vector3 moveDir)
    {
        // 先锁定移动,防止重复触发
        canMove = false;
        // 执行移动
        transform.position += moveDir;
        // 等待指定延迟时间
        yield return new WaitForSeconds(moveDelay);
        // 解锁移动,允许下一次按键
        canMove = true;
    }
}

关键说明

  • canMove变量:确保同一时间只有一个移动协程在执行,避免按键连续触发。
  • 统一使用Input.GetKeyDown:只在按键按下的第一帧响应,符合“每次按键移动一次”的需求。
  • 移动逻辑放在协程内:等待操作会阻塞协程的后续执行,确保延迟后才解锁下一次移动。

内容的提问来源于stack exchange,提问作者Mohamed Nasser

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 18:03:27