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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 08:53:09