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

Unity NavMesh Agent无法移动问题排查求助

Unity敌人AI移动故障:旋转/动画正常但无法移动

问题详情

实现敌人向玩家移动并转向的Unity脚本时,敌人的旋转和奔跑动画可正常触发,但始终停在原地无法移动。已尝试日志调试、重新烘焙NavMesh等排查手段,推测问题可能与Velocity参数相关,但无法准确定位。

相关信息

  • Inspector配置:敌人对象挂载了NavMeshAgent组件、Animator组件及自定义AI脚本
  • 核心代码片段:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;

public class EnemyAI : MonoBehaviour
{
    public Transform player;
    private NavMeshAgent agent;
    private Animator anim;

    void Start()
    {
        agent = GetComponent<NavMeshAgent>();
        anim = GetComponent<Animator>();
    }

    void Update()
    {
        agent.SetDestination(player.position);
        anim.SetBool("IsRunning", agent.velocity.magnitude > 0.1f);
    }
}

排查与修复方案

1. NavMeshAgent组件参数检查

  • 确认Speed、Acceleration参数不为0:Inspector中这两个值若设为0,会直接导致敌人无法产生移动速度
  • 验证Radius和Height:参数过大可能让敌人被判定为持续碰撞障碍物,无法启动移动
  • 检查Area Mask:确保敌人的NavMeshAgent区域掩码与场景中烘焙的NavMesh区域一致

2. NavMesh烘焙有效性验证

  • 重新烘焙NavMesh,确保玩家和敌人的初始位置都处于已烘焙的NavMesh区域内(Scene视图中可通过NavMesh的蓝色区域确认)
  • 场景中所有静态障碍物需标记为静态,避免烘焙时遗漏导致路径无效

3. Velocity与路径状态排查

  • 在Update中添加日志输出,确认路径和速度状态:
    Debug.Log($"当前速度:{agent.velocity.magnitude},路径状态:{agent.pathStatus}");
    
    • 若pathStatus返回PathInvalid,说明目标点不在NavMesh范围内,需调整玩家位置或重新烘焙NavMesh
    • 若velocity始终为0,检查是否有其他脚本将agent.isStopped设为true,强制阻止移动

4. 动画Root Motion冲突检查

  • 关闭Animator组件的Apply Root Motion选项:若开启Root Motion,动画会覆盖NavMeshAgent的移动逻辑,导致敌人无法通过NavMeshAgent控制移动

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 22:47:18