当前位置: 首页 > news >正文

鸿蒙游戏 AI NPC:行为树原理 + 实战代码

子玥酱(掘金 / 知乎 / CSDN / 简书 同名)

大家好,我是子玥酱,一名长期深耕在一线的前端程序媛 👩‍💻。曾就职于多家知名互联网大厂,目前在某国企负责前端软件研发相关工作,主要聚焦于业务型系统的工程化建设与长期维护。

我持续输出和沉淀前端领域的实战经验,日常关注并分享的技术方向包括前端工程化、小程序、React / RN、Flutter、跨端方案
在复杂业务落地、组件抽象、性能优化以及多端协作方面积累了大量真实项目经验。

技术方向:前端 / 跨端 / 小程序 / 移动端工程化
内容平台:
掘金、知乎、CSDN、简书
创作特点:
实战导向、源码拆解、少空谈多落地
文章状态:
长期稳定更新,大量原创输出

我的内容主要围绕前端技术实战、真实业务踩坑总结、框架与方案选型思考、行业趋势解读展开。文章不会停留在“API 怎么用”,而是更关注为什么这么设计、在什么场景下容易踩坑、真实项目中如何取舍,希望能帮你在实际工作中少走弯路。

子玥酱 · 前端成长记录官 ✨
👋 如果你正在做前端,或准备长期走前端这条路
📚 关注我,第一时间获取前端行业趋势与实践总结
🎁 可领取11 类前端进阶学习资源(工程化 / 框架 / 跨端 / 面试 / 架构)
💡 一起把技术学“明白”,也用“到位”

持续写作,持续进阶。
愿我们都能在代码和生活里,走得更稳一点 🌱

文章目录

    • 引言
    • 一、什么是行为树?
    • 二、为什么游戏都在用行为树?
    • 三、行为树的三大节点
      • Selector(选择器)
      • Sequence(顺序器)
      • Action(动作节点)
    • 四、设计一个简单 NPC
    • 五、定义行为树节点
    • 六、实现 Action 节点
    • 七、实现 Selector
    • 八、加入条件节点
    • 九、实现追击逻辑
    • 十、AISystem 驱动行为树
    • 十一、与 Store 结合
    • 十二、Boss 行为树实战
    • 十三、为什么行为树比 if-else 更强?
    • 十四、行为树与多端同步
    • 十五、未来升级:行为树 + AI Agent
    • 十六、一个关键认知升级
    • 总结

引言

很多开发者第一次给鸿蒙游戏加 NPC 时,都会这样写:

if(playerNear){attack()}

或者:

if(hp<30){runAway()}

刚开始感觉没问题:

能跑 能打 能追人

但随着游戏复杂度增加:

巡逻 追击 攻击 释放技能 逃跑 求援 Boss机制

很快就会出现一个问题:

if-else 地狱。

代码可能变成:

if(playerNear){if(hp>50){if(skillReady){castSkill()}else{attack()}}else{if(friendNear){callHelp()}else{runAway()}}}

几个月后连自己都不敢改,很多人会觉得:

是不是 AI 太复杂了?

其实不是,问题在于:

你在用条件判断实现决策系统。

而现代游戏普遍采用:

Behavior Tree (行为树)

来驱动 NPC。

一、什么是行为树?

先看一个最简单的 NPC,需求:

发现玩家 ↓ 攻击玩家

传统写法:

if(canSeePlayer()){attack()}

没问题,但增加需求:

发现玩家 ↓ 距离近 ↓ 攻击 距离远 ↓ 追击

逻辑开始复杂,行为树则表示为:

发现玩家? ↓ 是 ↓ 距离是否足够? ↓ ↓ 是 否 ↓ ↓ 攻击 追击

本质上:

行为树是一种可视化决策流程。

二、为什么游戏都在用行为树?

因为 NPC 本质上就是:

不断决策

例如,怪物:

巡逻 发现敌人 追击 攻击 逃跑

Boss:

一阶段 二阶段 狂暴阶段 释放技能 召唤小怪

这些本质都是:状态选择问题,行为树非常适合处理。

三、行为树的三大节点

最常见的是:

Selector Sequence Action

Selector(选择器)

意思:

从左到右尝试 成功一个就结束

例如:

攻击 ↓失败 追击 ↓失败 巡逻

表现:

优先攻击 其次追击 最后巡逻

Sequence(顺序器)

意思:

全部成功才算成功

例如:

发现玩家 ↓ 接近玩家 ↓ 攻击

任何一步失败:

整个流程失败

Action(动作节点)

真正执行行为,例如:

Attack Move Patrol RunAway

四、设计一个简单 NPC

需求:

发现玩家 ↓ 攻击 否则 ↓ 巡逻

行为树:

Selector ├── AttackPlayer └── Patrol

对应结构:

root=Selector(AttackPlayer(),Patrol())

五、定义行为树节点

基础接口:

enumNodeStatus{Success,Failure,Running}interfaceBTNode{tick():NodeStatus}

所有节点统一:

tick()

驱动。

六、实现 Action 节点

巡逻:

classPatrolNodeimplementsBTNode{tick():NodeStatus{console.info('Patrol')returnNodeStatus.Success}}

攻击:

classAttackNodeimplementsBTNode{tick():NodeStatus{console.info('Attack')returnNodeStatus.Success}}

七、实现 Selector

核心逻辑:

classSelectorNodeimplementsBTNode{constructor(privatechildren:BTNode[]){}tick():NodeStatus{for(constnodeofthis.children){constresult=node.tick()if(result===NodeStatus.Success){returnresult}}returnNodeStatus.Failure}}

作用:

优先执行最重要行为

八、加入条件节点

例如:

发现玩家?

判断,实现:

classSeePlayerNodeimplementsBTNode{constructor(privatenpc:NPC){}tick():NodeStatus{returnthis.npc.canSeePlayer()?NodeStatus.Success:NodeStatus.Failure}}

九、实现追击逻辑

需求:

发现玩家 ↓ 追击 ↓ 攻击

行为树:

Sequence ├── SeePlayer ├── MoveToPlayer └── Attack

代码:

constcombatTree=newSequenceNode([newSeePlayerNode(npc),newMoveNode(npc),newAttackNode(npc)])

十、AISystem 驱动行为树

前面我们讲过:

Store System HUD

架构,行为树应该属于:

AISystem

而不是:

UI

例如:

classAISystem{update(npc:NPC){npc.behaviorTree.tick()}}

十一、与 Store 结合

NPC状态:

classNPCStore{hp=100targetId=0position={x:0,y:0}}

行为树读取:Store 决策。

然后:

AISystem

修改:

Store

状态,形成:

Store ↓ BehaviorTree ↓ AISystem ↓ Store

闭环。

十二、Boss 行为树实战

Boss需求:

HP > 50% 普通攻击 HP < 50% 释放大招 HP < 20% 狂暴模式

行为树:

Selector ├── RageMode ├── UltimateSkill └── NormalAttack

代码:

Selector(RageNode(),UltimateNode(),AttackNode())

结构非常清晰。

十三、为什么行为树比 if-else 更强?

传统:

if()if()if()if()

最终:

无法维护

行为树:

节点化 可组合 可扩展

增加新行为:

SkillNode

插入即可,无需重写全部逻辑。

十四、行为树与多端同步

前面我们讲:

Store一致 System一致

才能实现:

多端一致性

行为树天然符合,因为:

输入一致 ↓ 行为树一致 ↓ 决策一致 ↓ 状态一致

例如:

手机NPC PC NPC

执行同一行为树,结果相同。

十五、未来升级:行为树 + AI Agent

未来 NPC 不再只是:

固定规则

而是:

行为树 + 大模型

例如:

行为树 负责框架 LLM 负责决策

结构:

Selector ↓ AskLLM() ↓ Attack Move Trade Talk

NPC 会变得更加智能。

十六、一个关键认知升级

初学者认为:

AI = if-else

进阶开发者认为:

AI = 行为树

而大型项目最终理解:

行为树不是 AI,而是管理 AI 决策复杂度的架构。

因为真正的问题从来不是:

NPC会不会攻击

而是:

当NPC拥有100种行为时 系统还能不能维护

总结

鸿蒙游戏中的 AI NPC 推荐架构:

Store ↓ BehaviorTree ↓ AISystem ↓ Store

核心节点:

Selector Sequence Action

核心优势:

逻辑清晰 可视化 易扩展 易测试 支持多端同步

如果用一句话总结:

行为树的本质,不是让 NPC 更聪明,而是让复杂 AI 行为变得可管理、可组合、可扩展。

http://www.jsqmd.com/news/990544/

相关文章:

  • Vue + G6 实现拖拽连线、右键编辑、本地存取的流程图交互方案
  • 零基础玩转3D动画:OpenMMD真人视频转动画终极指南
  • AIri项目容器化架构设计与部署策略指南
  • BallonTranslator:3步完成漫画翻译,AI技术让跨语言阅读更简单
  • 花9.9元就能知道AI怎么评价你的品牌,你试过吗?
  • Matlab实现的加速近端梯度法(APG)工具包,支持Lasso、矩阵补全等非光滑凸优化任务
  • 株洲市本地2026年最新黄金回收靠谱门店TOP排行榜+白银回收+铂金回收+彩金回收及联系方式+地址+电话+诚信店铺推荐 - 盛世金银回收
  • 给你的MIPS CPU装个“仪表盘”:Verilog实现性能计数器与UART打印调试全流程
  • LORE算法:低维嵌入与Schatten准范数优化解析
  • C++轻量级代码生成工具源码,含词法分析器与抽象语法树构建模块
  • C语言写的控制台版学生信息管理工具:带登录、增删改查和CSV存取,开箱即用
  • Windows HEIC缩略图预览专业解决方案:让资源管理器原生支持苹果照片格式
  • 用FPGA和Matlab联手打造你的第一台DDS信号发生器(ZYNQ平台,含ILA调试技巧)
  • VC Boom 新手快速上手与实战指南
  • 手把手教你用glTF Viewer 2.0检查复杂模型:从单文件到多文件文件夹的完整操作指南
  • 为什么需要TGET?深入理解Ascend PTO中的远程数据读取技术
  • 大数据分析:定义、重要性和对企业的好处
  • 边缘语音合成架构解析:构建可靠的WebSocket通信层与时钟同步机制
  • 渭南市本地2026年最新黄金回收靠谱门店TOP排行榜+白银回收+铂金回收+彩金回收及联系方式+地址+电话+诚信店铺推荐 - 盛世金银回收
  • 驻马店市本地2026年最新黄金回收靠谱门店TOP排行榜+白银回收+铂金回收+彩金回收及联系方式+地址+电话+诚信店铺推荐 - 盛世金银回收
  • 别再死记硬背NAT命令了!用华为eNSP模拟真实公司网络,手把手带你配置NAPT(附避坑点)
  • 给Verilog新手的HDLBits保姆级入门指南:从第一个wire到第一个芯片
  • 你的glTF模型合规吗?用glTF Viewer 2.0的验证报告功能一键排查格式问题
  • 用三菱FX3U PLC模拟四种喷泉花样:手把手教你玩转顺序控制与模式选择
  • uni-app调用第三方硬件SDK(如称重/打印)实战:从原生插件封装到HBuilderX集成的完整链路
  • 手把手教你用STM32解析ATGM332D-5N GPS模块的NMEA数据(附完整代码)
  • 温州市本地2026年最新黄金回收靠谱门店TOP排行榜+白银回收+铂金回收+彩金回收及联系方式+地址+电话+诚信店铺推荐 - 盛世金银回收
  • BilibiliDown终极指南:如何5分钟实现B站视频批量下载与高效管理
  • 如何在10分钟内为Steam Deck搭建终极怀旧游戏平台:EmuDeck一键配置30+模拟器完整指南
  • AI赋能数字孪生:从虚拟镜像到虚实智联