简介
AI模块待重构
这里提供了一个行为树框架,你可以利用它来定制AI。
制作一个AI,令单位在空闲时利用搜敌器
ai_attack
搜索附近的敌人并攻击:
-- 给AI设定一个合适的名字,以便在其他地方添加给单位
local mt = base.ai['空闲时搜敌']
-- 每500毫秒执行一次 on_idle
mt.pulse = 500
-- 当单位空闲时执行搜敌
function mt:on_idle()
-- 这里的self为执行AI的单位
local target = ai_attack(self)
if target then
self:attack(target)
end
end
使用add_ai给单位添加AI,例如我们有个单位
u
:
u:add_ai '空闲时搜敌' {}
创建
创建/获取AI
- 参数
- name (string) - AI名
- 返回
- ai (ai) - AI对象
使用add_ai来添加AI。
-- 将创建的AI保存下来,你之后可能需要修改它的属性,或是为它注册事件
local mt = base.ai[name]
属性
属性只能在创建时设置。
pulse
心跳
执行ai:on_idle的周期,类型为integer
,单位为毫秒
。
事件
通过注册函数来接收事件。和其他对象的事件不同,AI事件中self
表示执行AI的单位,而不是AI对象。
on_add
获得AI事件
- 回调参数
- data (table) - AI数据,使用add_ai添加AI时作为 参数2 传入。
单位添加AI时触发此事件。
function mt:on_add(data)
-- 你的代码
end
on_idle
空闲事件
这个事件会在以下4种情况触发:
- 进入空闲状态。例如技能施放结束;移动结束;攻击结束等。
- 攻击冷却完成。
- 根据AI的pulse属性周期性调用。
- 使用execute_ai主动执行。
在以下情况下不会触发此事件:
- 处于死亡状态。
- 正在攻击或施法。
- 拥有隐藏。
- 使用base.game:disable_ai关闭了AI。
function mt:on_idle()
-- 你的代码
end
on_remove
移除AI事件
单位移除AI时触发此事件。
function mt:on_remove()
-- 你的代码
end