Unity中使用Vector3.MoveTowards让光标返回初始位置失效问题
问题解决:让鼠标松开后Cursor平滑返回初始位置
你的代码问题出在OnMouseUp只执行一次——Vector3.MoveTowards只会在松开鼠标的那一帧计算一次位置变化,没法让cursor持续移动回初始点。要实现平滑返回的效果,得把移动逻辑放到每帧执行的Update里,用一个开关变量控制是否启动返回流程。
修改后的代码如下:
[SerializeField] private Transform cursor; private Vector3 originalPosition; private bool isReturning = false; void Start() { originalPosition = cursor.position; Debug.Log(originalPosition); } void Update() { if (isReturning) { // 每帧向初始位置移动 cursor.position = Vector3.MoveTowards(cursor.position, originalPosition, 10f * Time.deltaTime); // 当到达初始位置后停止移动 if (Vector3.Distance(cursor.position, originalPosition) < 0.01f) { cursor.position = originalPosition; isReturning = false; } } } void OnMouseUp() { Debug.Log("MouseUp"); // 触发返回逻辑 isReturning = true; }
关键改动说明
- 新增
isReturning布尔变量,用来标记是否需要执行返回初始位置的逻辑 - 把移动逻辑移到
Update方法中,确保每帧都会计算并更新cursor的位置 - 增加了距离判断,当cursor足够接近初始位置时,直接将其设为初始位置并停止移动,避免因精度问题导致的微小抖动
内容的提问来源于stack exchange,提问作者Ilya
相关产品推荐
相关产品推荐

