Skip to content

导航与AI基础

unity-navigation-ai-system

先分清两个概念

导航 负责: NPC 怎么从 A 点走到 B 点。

AI 负责: NPC 为什么要走、什么时候追、什么时候巡逻、什么时候攻击。

所以你可以先记住:

AI = 感知 + 决策 + 导航 + 行动
导航系统 = NavMesh + NavMeshAgent + Obstacle + Link + Area

1. NavMesh:可行走地图

NavMesh 可以理解成 Unity 给 NPC 用的“蓝色可走地图”。

场景里的地面、楼梯、平台、障碍物,对 NPC 来说太复杂。 Unity 会先把它们烘焙成一张简单的可行走区域。

真实场景
  ↓ Bake
NavMesh 蓝色可走区域

NPC 在上面找路

NPC 通常不能随便在空气、墙里、悬崖外走。 它只能在 NavMesh 上移动。

2. NavMesh Surface:生成 NavMesh 的组件

NavMesh Surface 负责烘焙 NavMesh。

流程是:

选择场景地面
添加 NavMesh Surface
设置 Agent 类型
点击 Bake
生成蓝色可走区域

如果没有 Bake,NPC 就没有“地图”,自然不知道怎么走。

3. NavMeshAgent:会走路的 NPC

NavMeshAgent 挂在敌人、怪物、村民、宠物这些会移动的角色身上。

它负责:

  • 找路
  • 沿路径移动
  • 转向
  • 停在目标附近
  • 避开其他 Agent
  • 尝试绕开障碍

常见参数:

参数作用
Speed最大移动速度
Angular Speed转身速度
Acceleration加速度
Stopping Distance离目标多近就停下
Radius角色占地半径
Height角色高度
Auto Braking接近目标时是否减速
Area Mask允许走哪些区域

最小追击逻辑:

using UnityEngine;
using UnityEngine.AI;

public class ChasePlayer : MonoBehaviour
{
    public Transform player;
    private NavMeshAgent agent;

    void Awake()
    {
        agent = GetComponent<NavMeshAgent>();
    }

    void Update()
    {
        agent.SetDestination(player.position);
    }
}

这段代码的意思是: 每帧告诉 Agent:“去玩家现在的位置。”

名称作用例子
NavMeshObstacle动态障碍箱子、门、车辆、可推动物体
NavMeshLink连接断开的路跳跃、上下平台、过桥、进门
Areas and Costs控制路线偏好水区更难走、门只有某些敌人能走

比如水面区域 Cost 设置高一点,NPC 就会优先绕路。 如果绕路太远,它才可能穿过水区。

5. AI 基础:NPC 的大脑

游戏 AI 不是一上来就机器学习。新手阶段,最常用的是规则和状态机。

一个敌人可以这样拆:

感知:看到玩家了吗?
决策:追击还是巡逻?
目标:玩家位置还是巡逻点?
移动:交给 NavMeshAgent
行动:播放动画、攻击、音效、特效

最简单状态机:

Idle 待机

Patrol 巡逻
  ↓ 看到玩家
Chase 追击
  ↓ 距离够近
Attack 攻击
  ↓ 玩家跑远
Chase 追击
  ↓ 玩家丢失
Patrol 巡逻

6. 学习顺序

建议你这样学:

  1. 创建一个地面
  2. 安装 / 使用 AI Navigation
  3. 添加 NavMesh Surface
  4. 点击 Bake
  5. 创建一个敌人
  6. 给敌人加 NavMeshAgent
  7. 写脚本让它走到固定点
  8. 再写脚本让它追玩家
  9. 加状态机:巡逻、追击、攻击
  10. 最后加动画、音效、攻击判定

常见问题

问题常见原因
NPC 不动没有 Bake NavMesh
报 Agent 不在 NavMesh 上角色起点不在蓝色区域附近
找不到路目标点不在 NavMesh 上
卡在墙边Agent 半径太大、路太窄
一直贴脸Stopping Distance 太小
巡逻点走不到巡逻点放在不可走区域
避障差Obstacle 设置不对,或场景太拥挤

官方参考链接

文章评价

读完这篇,留下你的看法

暂无审核通过的评价。

登录账号后才能评价。

本站访客数0总站访问量0本页访问量0