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

Unity 2D实现移动车辆朝向当前目标点的技术需求

Unity 2D 车辆朝向目标点的实现方案

要让车辆在移动时朝向当前目标点,你可以在现有移动逻辑基础上,添加方向计算与旋转控制的代码。核心思路是:计算车辆到当前目标的方向向量,转换为2D空间下的旋转角度,再赋值给车辆的transform组件。

以下是修改后的完整脚本:

public class gr_car_move : MonoBehaviour
{
    public float speed;
    public Transform[] targets;
    // 可选:控制转向平滑度,0表示立即转向
    public float turnSmoothTime = 0.1f;

    private int currentTargetIndex = 0;
    private float _turnSmoothVelocity;

    void Start()
    {
        if (targets.Length == 0)
        {
            Debug.LogError("No targets assigned to script!");
        }
    }

    void Update()
    {
        if (currentTargetIndex >= targets.Length) return;

        var targetPos = targets[currentTargetIndex].position;
        var step = speed * Time.deltaTime;
        
        // 移动逻辑
        transform.position = Vector3.MoveTowards(transform.position, targetPos, step);

        // 判断是否到达目标点(优化浮点数精度问题)
        if (Vector3.Distance(transform.position, targetPos) < 0.01f)
        {
            if (currentTargetIndex == targets.Length - 1)
            {
                return;
            }
            currentTargetIndex = (currentTargetIndex + 1) % targets.Length;
        }
        else
        {
            // 朝向目标点的逻辑
            // 计算2D方向向量(忽略Z轴差异)
            Vector2 direction = new Vector2(targetPos.x - transform.position.x, targetPos.y - transform.position.y);
            direction.Normalize();

            if (direction.magnitude > 0.01f)
            {
                // 将方向向量转换为角度(修正精灵默认朝向偏移)
                float targetAngle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg + 90f;
                // 平滑转向(不需要平滑可直接赋值targetAngle)
                float angle = Mathf.SmoothDampAngle(transform.eulerAngles.z, targetAngle, ref _turnSmoothVelocity, turnSmoothTime);
                // 设置Z轴旋转(2D场景仅需修改Z轴)
                transform.rotation = Quaternion.Euler(0, 0, angle);
            }
        }
    }
}

关键细节说明:

  • 方向向量归一化:确保向量长度不影响角度计算,只保留方向信息。
  • 角度修正:Unity 2D精灵默认朝向Y轴正方向,而Mathf.Atan2以X轴正方向为0度基准,因此需要加90度偏移适配。
  • 平滑转向:通过Mathf.SmoothDampAngle实现渐变旋转效果,可通过turnSmoothTime参数调整转向的柔和程度,不需要平滑时直接赋值targetAngle即可。
  • 目标点判断优化:用Vector3.Distance加阈值的方式替代直接位置相等判断,避免浮点数精度误差导致无法触发目标切换。

内容的提问来源于stack exchange,提问作者Narius

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 22:03:28