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
相关产品推荐
相关产品推荐

