Unity 2D平台跳跃游戏敌人翻转问题:路点触发未生效
解决Unity 2D敌人抵达路点时的精灵翻转问题
你的代码存在两个核心问题:
- 硬编码坐标
-2会因浮点精度误差导致敌人移动时跳过触发条件(比如从-1.9直接跳到-2.1,从未触发<= -2的判断); - 仅翻转精灵但未改变敌人移动方向,敌人会一直往原方向走,根本到不了目标位置。
以下是针对性的解决方案:
1. 改用路点对象而非硬编码坐标
创建两个空物体作为左右路点,在脚本中引用它们,既方便场景内调整位置,也能避免硬编码的精度问题。
2. 结合移动逻辑与触发判断
敌人抵达路点时,需要同时完成精灵翻转和移动方向切换,才能在两个路点间往返。完整实现代码如下:
public Transform waypointLeft; // 拖拽左路点对象到此处 public Transform waypointRight; // 拖拽右路点对象到此处 public float moveSpeed = 2f; private Vector2 targetWaypoint; void Start() { // 初始目标设为右路点 targetWaypoint = waypointRight.position; } void Update() { // 向目标路点移动 transform.position = Vector2.MoveTowards(transform.position, targetWaypoint, moveSpeed * Time.deltaTime); // 检查是否抵达左路点(用距离阈值避免浮点精度问题) if (Vector2.Distance(transform.position, waypointLeft.position) < 0.1f) { FlipSprite(); targetWaypoint = waypointRight.position; // 切换目标到右路点 } // 检查是否抵达右路点 else if (Vector2.Distance(transform.position, waypointRight.position) < 0.1f) { FlipSprite(); targetWaypoint = waypointLeft.position; // 切换目标到左路点 } } // 封装精灵翻转逻辑 void FlipSprite() { Vector3 scale = transform.localScale; scale.x *= -1; transform.localScale = scale; }
关键优化点
- 用
Vector2.Distance判断与路点的距离,设置0.1f的阈值,完全规避浮点精度导致的触发失效; - 切换移动目标让敌人在两个路点间循环移动,确保翻转逻辑能被重复触发;
- 封装翻转方法,代码更易维护。
内容的提问来源于stack exchange,提问作者Unity2dplatformergame
相关产品推荐
相关产品推荐

