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

如何为Unity中往返运动的对象添加转向延迟?

解决Unity往返运动转向前添加延迟的问题

你原来用Mathf.Sin实现的往返是连续平滑的,没有明确的转向节点,直接插协程会和Update的实时位置计算冲突——要么延迟效果被覆盖,要么协程写法错误导致游戏卡顿。下面是可行的解决方案:

把运动逻辑完全放到协程里,分阶段控制移动和延迟,替代原来的Update逻辑:

public class PushPlayer : MonoBehaviour
{
    public float moveAmount = 3.3f;
    public float speed = 1.1f;
    public float turnDelay = 1.0f; // 转向延迟时间
    private Vector3 startPos;
    private Vector3 targetPos;

    void Start()
    {
        startPos = transform.position;
        // 计算往返的目标位置(Z轴偏移设定值)
        targetPos = startPos + new Vector3(0, 0, moveAmount);
        // 启动协程控制往返运动
        StartCoroutine(MoveBackAndForth());
    }

    IEnumerator MoveBackAndForth()
    {
        while (true)
        {
            // 阶段1:从起点移动到目标点
            while (Vector3.Distance(transform.position, targetPos) > 0.01f)
            {
                transform.position = Vector3.MoveTowards(transform.position, targetPos, speed * Time.deltaTime);
                yield return null; // 等待下一帧,保证移动平滑
            }
            // 强制精准到位,避免误差累积
            transform.position = targetPos;
            // 到达目标后延迟1秒再转向
            yield return new WaitForSeconds(turnDelay);

            // 阶段2:从目标点移动回起点
            while (Vector3.Distance(transform.position, startPos) > 0.01f)
            {
                transform.position = Vector3.MoveTowards(transform.position, startPos, speed * Time.deltaTime);
                yield return null;
            }
            transform.position = startPos;
            // 到达起点后延迟1秒再转向
            yield return new WaitForSeconds(turnDelay);
        }
    }

    // 必须删掉或注释原来的Update方法,否则会和协程的位置更新冲突
    // void Update()
    // {
    //     Vector3 v = startPos;
    //     v.z += moveAmount * Mathf.Sin(Time.time * speed);
    //     transform.position = v;
    // }
}

为什么你之前的尝试没用?

  • 协程没效果:因为原来的Update一直在用Sin实时计算位置,协程延迟期间位置被持续覆盖,根本看不到停顿
  • 游戏冻结:大概率是协程里写了无yield return的死循环(比如while(true)里没加等待),直接卡死主线程

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 20:05:18