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

Unity中处理连续鼠标输入触发循序Lerp位移的代码优化方案问询

Unity点击序列移动功能代码优化方案

核心优化思路

  • 用数组存储序列移动的目标点,消除重复的目标点声明和重复的Lerp判断逻辑
  • 用单个整型索引变量记录当前要移动到的目标点序号,直接替换所有clickX、lerpX相关的布尔变量,消除冗余的分支判断
  • 简化计时逻辑,用单次时间差计算替代单独的倒计时方法,减少无效的逐帧累加操作

优化后完整代码

public class SequenceMover : MonoBehaviour
{
    [Header("移动参数")]
    [SerializeField] private Transform[] moveTargets; // Inspector面板按顺序拖入4个目标点即可
    [SerializeField] private float lerpSpeed = 10f;
    [SerializeField] private float maxClickInterval = 2f; // 最大允许点击间隔,超时后下次点击重新从第一个点开始

    private int _currentTargetIndex = 0;
    private float _lastClickTime = float.MinValue;
    private bool _isMoving = false;

    private void Update()
    {
        // 统一的移动逻辑,无需多分支判断
        if (_isMoving)
        {
            transform.position = Vector3.Lerp(transform.position, moveTargets[_currentTargetIndex].position, Time.deltaTime * lerpSpeed);
        }

        // 点击逻辑
        if (Input.GetMouseButtonDown(0))
        {
            float timeSinceLastClick = Time.time - _lastClickTime;
            // 点击间隔超时,重置索引到第一个目标点
            if (timeSinceLastClick > maxClickInterval)
            {
                _currentTargetIndex = 0;
            }
            // 触发移动,更新点击时间
            _isMoving = true;
            _lastClickTime = Time.time;
            // 索引自增,超过目标点总数后自动回到0
            _currentTargetIndex = (_currentTargetIndex + 1) % moveTargets.Length;
        }
    }
}

优化效果说明

  • 总代码量减少60%以上,完全消除冗余布尔变量和重复分支逻辑,可读性大幅提升
  • 扩展性更强,后续需要增加/减少移动目标点时,仅需在Inspector面板修改数组长度即可,无需改动业务代码
  • 运行效率更高,没有多余的计时累加和多分支判断,每一帧仅执行一次Lerp计算

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 22:06:10