当前位置: 首页 > 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.gsyq.cn/news/1502291.html

相关文章:

  • 花9.9元就能知道AI怎么评价你的品牌,你试过吗?
  • BallonTranslator:3步完成漫画翻译,AI技术让跨语言阅读更简单
  • 别再只写微分方程了!用Python+复杂网络给你的演化博弈模型加点‘现实感’
  • LORE算法:低维嵌入与Schatten准范数优化解析
  • 大数据分析:定义、重要性和对企业的好处
  • 边缘语音合成架构解析:构建可靠的WebSocket通信层与时钟同步机制
  • 渭南市本地2026年最新黄金回收靠谱门店TOP排行榜+白银回收+铂金回收+彩金回收及联系方式+地址+电话+诚信店铺推荐 - 盛世金银回收
  • 用三菱FX3U PLC模拟四种喷泉花样:手把手教你玩转顺序控制与模式选择
  • 给Verilog新手的HDLBits保姆级入门指南:从第一个wire到第一个芯片
  • 2026年南宁租车企业最新TOP排行:商务、旅游、自驾租车选购指南:本地源头服务商口碑排行深度解析 - 海棠依旧大
  • 从家庭宽带路由器到企业网关:一文搞懂NAT/NAPT的底层逻辑与eNSP实验验证
  • 乌海市本地2026年最新黄金回收靠谱门店TOP排行榜+白银回收+铂金回收+彩金回收及联系方式+地址+电话+诚信店铺推荐 - 盛世金银回收
  • GTA5线上小助手:终极免费辅助工具完整使用指南
  • 智慧树自动刷课插件终极指南:3分钟解放你的学习时间
  • 手把手教你用MATLAB Simulink搭建单相全桥逆变电路(双极性SPWM仿真)
  • 终极指南:如何用Oh My Posh打造个性化终端,提升开发效率
  • 保姆级教程:手把手教你用Python模拟毫米波雷达遮挡检测(附代码)
  • Nmap命令太复杂?试试这个图形化替代方案:Zenmap实战配置与结果分析指南
  • 【打造桌面智能助手】OpenClaw 下载安装及故障排查汇总(包含安装包)
  • 空洞骑士模组管理终极指南:Scarab模组管理器完整教程
  • 〔重庆理工大学〕编译原理实验报告【词法分析实验】
  • 阳江市2026年最新黄金回收+白银回收+铂金回收+彩金回收门店TOP排行榜+推荐及联系方式+地址+电话+靠谱店铺指南 - 大熊猫898989
  • 2026年6月高级珠宝品牌推荐:五大选择指南专业评测收藏级宝石特点价格 - 品牌推荐
  • 一个成熟的项目经理,需经历这三个层次
  • 【2026超详细汇总】大模型面经指南(附答案)
  • nsproxy
  • 乐山市本地2026年最新黄金回收靠谱门店TOP排行榜+白银回收+铂金回收+彩金回收及联系方式+地址+电话+诚信店铺推荐 - 盛世金银回收
  • 鄂尔多斯市本地2026年最新黄金回收靠谱门店TOP排行榜+白银回收+铂金回收+彩金回收及联系方式+地址+电话+诚信店铺推荐 - 盛世金银回收
  • 秋冬服装如何稳赚?AI数据化运营抢占换季红利
  • 宜宾市2026年最新黄金回收+白银回收+铂金回收+彩金回收门店TOP排行榜+推荐及联系方式+地址+电话+靠谱店铺指南 - 大熊猫898989