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

Unity 2D:如何让车辆沿Y轴移动时向目标车辆X轴靠拢?

问题分析与修复方案

先明确你代码里直接导致功能失效的核心问题,再给出针对性修复:

核心问题点

  • 移动方向完全错误:需求是两辆汽车向上移动,但你代码else分支里把moveWay.y设为-1,这是向下移动,和需求完全相反。
  • X轴靠拢逻辑错误:原代码里的X轴移动逻辑是固定赋值-1/1,完全没有根据userCar的位置计算靠拢方向,根本实现不了向目标靠拢的效果。
  • 浮点数直接比较:transform.position.x == 0这种写法会因为浮点数精度问题失效,永远触发不了对应的逻辑。
  • 速度逻辑混乱:else分支直接硬写speed = movingDownSpeed,和向上移动的需求不匹配。

修复后的完整代码

private void Awake()
{
    _transform = transform;
}

// 新增X轴靠拢速度配置,可在Inspector中调整
public float xAxisMoveSpeed = 2f;

void FixedUpdate()
{
    if (Time.timeScale <= 0)
        return;

    Vector2 moveWay = Vector2.zero;
    // 统一设置向上移动的Y轴方向
    moveWay.y = 1;

    if (Time.time - StartGame.gameStartTime < 3)
    {
        // 前3秒加速向上
        if (speed < maxSpeedOfMovingUp)
        {
            speed += movingUpAcceleration * Time.deltaTime;
        }
    }
    else
    {
        // 保持向上的匀速移动,和前3秒逻辑统一
        speed = maxSpeedOfMovingUp;

        float distanceToUserCar = Vector2.Distance(_transform.position, userCar.position);
        // 距离达标时加分(仅一次)
        if (distanceToUserCar <= 10 && !point)
        {
            ScoreInfo.Instance.AddScore(50);
            point = true;
        }

        // 靠近到阈值后,向userCar的X轴靠拢
        if (distanceToUserCar < 3 && movingCar)
        {
            Debug.Log("开始向玩家车辆靠拢");
            // 计算X轴差值,确定靠拢方向
            float xDiff = userCar.position.x - _transform.position.x;
            // 根据差值方向设置X轴移动量,用单独的X轴速度控制靠拢快慢
            moveWay.x = Mathf.Sign(xDiff) * xAxisMoveSpeed;

            // 对齐到足够近时停止X轴移动,避免抖动
            if (Mathf.Abs(xDiff) < 0.1f)
            {
                moveWay.x = 0;
                Debug.Log("已对齐玩家车辆X轴");
            }
        }
    }

    // 更新车辆位置
    _transform.position += new Vector3(moveWay.x, moveWay.y, 0) * speed * Time.deltaTime;
}

关键修改说明

  1. 修正移动方向:把所有Y轴方向统一设为1,确保汽车始终向上移动,完全匹配需求。
  2. 重构X轴靠拢逻辑:
    • 通过计算userCar.position.x - _transform.position.x获取X轴差值,用Mathf.Sign()确定靠拢方向(正为右,负为左)。
    • 新增xAxisMoveSpeed变量,单独控制X轴靠拢速度,方便调试调整。
    • 加入差值小于0.1的判断,避免汽车因浮点数精度问题来回抖动。
  3. 修复浮点数比较问题:用范围判断替代直接的等于判断,解决精度导致的逻辑失效问题。
  4. 统一速度逻辑:else分支使用maxSpeedOfMovingUp保持向上匀速,和前3秒的加速逻辑统一,避免速度混乱。
  5. 优化触发顺序:把加分逻辑放在靠拢逻辑前面,确保距离达标时先完成加分,再处理靠拢动作。

额外建议

  • 如果道路有固定车道(比如X轴0、2这类固定位置),可以把userCar的X轴位置取整后再计算靠拢方向,确保movingCar精准对齐车道。
  • 用Vector2.Distance替代Vector3.Distance,2D项目中计算更高效。

内容的提问来源于stack exchange,提问作者Feynman Jr.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 20:55:18