使用状态机实现人工智能行为
完全使用 Lua 脚本实现基于 FSM 的敌方人工智能逻辑。
使用状态机实现人工智能行为 是 CoddyKit 上的免费 Lua Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Lua Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Lua Academy 课程共包含 4 节课。
什么是有限状态机
有限状态机(FSM)将行为定义为一组状态,状态之间通过由条件或事件触发的转换相互连接。
FSM 表结构
将 FSM 表示为一个表,其中包含当前状态、状态表,以及每个状态可选的进入、退出和更新回调。
local function newFSM(initialState)
return {
current = initialState,
states = {},
}
end定义状态
每个状态都是一个表,其中包含可选的 enter、update 和 exit 函数。
local fsm = newFSM("idle")
fsm.states.idle = {
enter = function(self) print("Enter idle") end,
update = function(self, dt)
if self.enemy then self:transition("chase") end
end,
exit = function(self) print("Exit idle") end
}添加追逐状态
追逐状态会追踪玩家,并在距离足够近时转换到攻击状态。
fsm.states.chase = {
enter = function(self) print("Chasing!") end,
update = function(self, dt)
if self.distToPlayer < 2 then
self:transition("attack")
elseif not self.enemy then
self:transition("idle")
end
end
}转换函数
转换函数会调用当前状态的退出函数,切换状态,然后调用新状态的进入函数。
function fsm:transition(newState)
local cur = self.states[self.current]
if cur and cur.exit then cur:exit() end
self.current = newState
local next = self.states[newState]
if next and next.enter then next:enter() end
end更新 FSM
在每个游戏时钟周期调用 fsm:update(dt),运行当前状态的更新逻辑。
function fsm:update(dt)
local state = self.states[self.current]
if state and state.update then
state:update(dt)
end
end分层状态机
状态可以包含嵌套的 FSM。父状态处理较高层次的行为(战斗或巡逻),子 FSM 则处理每个父状态内部的细节。
数据驱动的 FSM
将 FSM 转换定义为从配置文件加载的数据表。这样,设计人员无需修改代码就能调整 AI。
local transitions = {
idle = {seeEnemy = "chase"},
chase = {lostEnemy = "idle", nearEnemy = "attack"},
attack = {enemyDead = "idle"},
}堆叠状态机
状态栈允许临时状态(例如“眩晕”)压入当前状态之上,并在临时状态结束后恢复原状态。
多个 AI 代理
每个敌方实体都有自己的 FSM 实例,因此它们的 AI 会彼此独立地运行。借助 Lua 表和闭包,实现这一点非常容易。
调试 FSM
在开发期间记录所有状态转换。跟踪表会存储 {from, to, time},用于事后分析 AI 行为。
FSM 问题
FSM 中的状态转换由什么触发?
回顾:使用状态机构建 AI
Lua FSM 使用由状态对象(进入、更新、退出)构成的表,并配合转换函数。它能清晰分离 AI 职责,支持数据驱动的设计,并可从简单的敌人逻辑扩展到复杂的分层行为树。
常见问题解答
「使用状态机实现人工智能行为」课时是免费的吗?
是的 — 「使用状态机实现人工智能行为」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Lua Academy 课程的其余内容,请升级到 CoddyKit PRO。 Lua Academy 课程共包含 4 节课。
「使用状态机实现人工智能行为」这节课中我会学到什么?
完全使用 Lua 脚本实现基于 FSM 的敌方人工智能逻辑。 你通过在浏览器中直接运行的动手代码来练习 Lua Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Lua Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Lua Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「使用状态机实现人工智能行为」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Lua Academy 课中编写并运行代码吗?
能。每节 Lua Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- Lua 中的事件系统
- 基于组件的脚本编程
- 使用状态机实现人工智能行为
- 数据驱动配置和热重载