用 AI 做鸿蒙游戏 NPC,是一种什么体验?
子玥酱(掘金 / 知乎 / ZEEKLOG / 简书 同名)
大家好,我是子玥酱,一名长期深耕在一线的前端程序媛 👩💻。曾就职于多家知名互联网大厂,目前在某国企负责前端软件研发相关工作,主要聚焦于业务型系统的工程化建设与长期维护。
我持续输出和沉淀前端领域的实战经验,日常关注并分享的技术方向包括前端工程化、小程序、React / RN、Flutter、跨端方案,
在复杂业务落地、组件抽象、性能优化以及多端协作方面积累了大量真实项目经验。
技术方向:前端 / 跨端 / 小程序 / 移动端工程化
内容平台:掘金、知乎、ZEEKLOG、简书
创作特点:实战导向、源码拆解、少空谈多落地
文章状态:长期稳定更新,大量原创输出
我的内容主要围绕 前端技术实战、真实业务踩坑总结、框架与方案选型思考、行业趋势解读 展开。文章不会停留在“API 怎么用”,而是更关注为什么这么设计、在什么场景下容易踩坑、真实项目中如何取舍,希望能帮你在实际工作中少走弯路。
子玥酱 · 前端成长记录官 ✨
👋 如果你正在做前端,或准备长期走前端这条路
📚 关注我,第一时间获取前端行业趋势与实践总结
🎁 可领取 11 类前端进阶学习资源(工程化 / 框架 / 跨端 / 面试 / 架构)
💡 一起把技术学“明白”,也用“到位”
持续写作,持续进阶。
愿我们都能在代码和生活里,走得更稳一点 🌱
文章目录
引言
如果你做过游戏开发,一定写过 NPC。而且大概率是这样写的:
if(playerNear){attack()}else{patrol()}简单、直接、可控。但也有一个明显问题:
NPC 永远是“写死的”
而当你把 AI 引入到 HarmonyOS 游戏里,事情会发生变化:
const action = npcAgent.decide(state)这时候你会发现:
你不再是在“写 NPC”,而是在“创造一个角色”
一、从“脚本 NPC”到“智能 NPC”
先看最核心的变化。
传统 NPC
if(hp <30){runAway()}else{attack()}特点:
- 可预测
- 可控制
- 可调试
AI NPC
const action = agent.decide({ hp, enemyDistance, history })特点:
- 不完全可预测
- 有“行为风格”
- 会“变化”
本质变化:
NPC 从“规则集合”,变成“决策系统”
二、第一感受:NPC“活”了
这是最直观的体验。
传统 NPC
玩家靠近 → 攻击 玩家远离 → 停止 AI NPC
可能会:
- 先观察你
- 选择绕后
- 假装撤退再反击
开发者的第一反应通常是:
“这行为我没写过啊?”
没错—— 这正是 AI 的价值
三、第二感受:你开始“调性格”,而不是“写逻辑”
传统开发:
if(...)doSomething()AI 开发:
prompt =` 你是一个谨慎的敌人, 优先保命,其次攻击 `你在做的事情变成:
设计行为风格(Personality) 示例
npcAgent.setProfile({ style:"aggressive", riskTolerance:0.8})本质变化:
代码 → 行为设计
四、第三感受:调试方式完全变了
传统调试:
- 打断点
- 看变量
- 查逻辑
AI 调试:
- 看输入
- 看输出
- 调 prompt
示例
console.log("state:", state)console.log("action:", action)你会发现:
Bug 不再是“代码错了”,而是“AI 理解错了”
五、第四感受:不确定性
AI NPC 最大的特点: 不可完全预测
好处
- 更真实
- 更有趣
- 更耐玩
坏处
- 难调试
- 难复现
- 可能“失控”
示例
// 有时候 NPC 突然不攻击你会想:
“是 bug 吗?”
其实可能是:
AI 决策的结果
六、鸿蒙上的独特体验
在 HarmonyOS 上,AI NPC 还有一些独特优势。
1、端侧 AI
const action = localModel.infer(state)优点:
- 实时决策
- 无网络依赖
2、多设备感知
AI 可以感知:
手机输入 TV 状态 传感器数据 示例
agent.decide({ playerInput, deviceContext, environment })NPC 变成:
“全场景感知角色”
3、分布式协同
多个 NPC 可以协作:
teamAgent.decide(teamState)形成: AI 队伍
七、一个完整 AI NPC 示例
我们做一个简单 Demo:
1、NPC Agent
classNPCAgent{asyncdecide(state){if(state.hp <20){return"escape"}if(state.enemyDistance <50){return"attack"}return"patrol"}}这是“规则 + AI”的过渡版本。
2、接入页面
const action = npcAgent.decide({ hp:this.hp, enemyDistance:this.distance })this.execute(action)3、执行行为
execute(action:string){switch(action){case"attack":this.attack()breakcase"escape":this.runAway()break}}这就是最小 AI NPC 架构:
State → Agent → Action → Execute 八、进阶:接入大模型
如果你接入大模型(LLM),NPC 会更“人性化”。
示例
asyncdecide(state){const prompt =` 当前血量 ${state.hp} 敌人距离 ${state.enemyDistance} 你会怎么做? `returnawait llm.generate(prompt)}效果:
- 会说话
- 会表达情绪
- 会“演戏”
九、开发建议
1、不要一开始就用大模型
先用:
规则 → 简单 AI → LLM 2、加“安全边界”
if(!validAction(action)){ action ="idle"}3、记录行为日志
log.push({ state, action })4、限制决策频率
setInterval(()=>{ agent.decide()},500)十、最大的变化
传统 NPC :你写“它做什么”
AI NPC: 你定义“它是什么样的人”
总结
在 HarmonyOS 上,用 AI 做 NPC,本质是一次角色设计方式的升级。
可以总结为四个变化:
1、逻辑变了
if/else → AI 决策 2、开发方式变了
写代码 → 设计行为 3、调试方式变了
查 bug → 调 AI 4、体验变了
NPC → 角色 最后给你一个很有意思的结论:
当 NPC 不再是“写出来的”,而是“表现出来的”,游戏世界就开始变得真实。
而这,可能才是 AI 游戏真正的开始。