Unity项目技术求助:实现物体在两个Waypoint间往返移动
实现Unity物体在Waypoint间往返循环移动的解决方案
你的代码当前仅处理了单向移动到最后一个Waypoint的逻辑,未实现返程与循环机制。只需添加方向控制变量,并修改到达Waypoint后的索引更新逻辑,即可实现往返循环效果。
修改后的完整代码
using System.Collections.Generic; using UnityEngine; public class ObjSpawnerScript : MonoBehaviour { [SerializeField] List<Transform> waypoints; [SerializeField] GameObject ballPrefab; int waypointIndex = 0; // 控制移动方向:1=向列表末尾前进,-1=向列表开头折返 int direction = 1; void Start() { transform.position = waypoints[0].position; } void Update() { Move(); } void Move() { if (waypoints.Count == 0) return; var targetPosition = waypoints[waypointIndex].position; targetPosition.z = 0f; var movementThisFrame = 5.0f * Time.deltaTime; transform.position = Vector2.MoveTowards(transform.position, targetPosition, movementThisFrame); // 用距离判断是否到达目标,避免浮点数精度误差导致判断失效 if (Vector2.Distance(transform.position, targetPosition) < 0.01f) { // 到达端点时反转方向 if (waypointIndex == 0) { direction = 1; } else if (waypointIndex == waypoints.Count - 1) { direction = -1; } // 根据方向更新下一个目标Waypoint的索引 waypointIndex += direction; } } private void spawnBall() { Instantiate(ballPrefab, transform.position, Quaternion.identity); } }
关键改动说明
- 添加
int direction = 1;变量:通过1和-1的切换,控制物体是向列表末尾前进还是向开头折返。 - 优化到达判断逻辑:用
Vector2.Distance替代直接的==比较,解决浮点数精度误差导致的到达判断失效问题。 - 更新端点处理逻辑:当物体到达第一个或最后一个Waypoint时,反转移动方向,再通过
waypointIndex += direction更新下一个目标点,实现往返循环。
内容的提问来源于stack exchange,提问作者zlz1
相关产品推荐
相关产品推荐

