自定义AI介绍
数据编辑器显示自定义AI类型
点击数据编辑器左上角的齿轮,在展开的类型面板中选择自定义AI设置。
自定义AI节点属性
AI搜索类型优先级: 决定AI搜索器会优先搜索的目标,数值越大优先级便越高。例如英雄为3小兵为2野怪为1,那么会优先搜索到英雄,最后搜索到野怪。
搜敌筛选: 设置默认AI搜索器能搜索到的单位。必须:搜索到的单位必须拥有该类型。允许:搜索到的单位可以有或者没有该类型。不包括:搜索到的单位没有该类型。例如设置死亡为允许,则死亡单位也会被搜索到。
自定义AI结构
添加时逻辑: 在此AI被添加到单位身上时执行一次。例如给单位添加AI时会执行此逻辑。
移除时逻辑: 在此AI被从单位上移除时执行一次。例如单位进行了AI更换操作在新AI更换进单位之前便会执行此逻辑。
应激逻辑 每当单位受到敌方攻击时会执行此逻辑。例如单位被攻击或者技能命中时便会执行此逻辑。注意单位的AI关闭时依然有效
简单的行为树概念
行为树(Behavior Tree)是一种用于控制复杂行为逻辑的决策框架。它是由多个节点组成的由根到叶的树状结构,其中每个节点代表一种特定的行为或决策。在行为树中,所有节点被分为两大类:控制节点和执行节点(叶节点)。
控制节点: 控制节点主要负责控制和决定下一个将要运行的主节点。一般包括顺序节点(Sequence)、选择节点(Selector)、并行节点(Parallel),以及装饰节点(Decorator)等。
-
顺序节点(Sequence):它按顺序执行所有子节点,直到遇到一个返回失败结果的节点为止,否则会继续执行。如果所有节点都返回成功,那么它会执行完所有子节点并返回成功。
-
选择节点(Selector):选择节点会尝试执行所有子节点,直到有一个返回成功,它就会停止执行并返回成功。如果所有节点都返回失败,那么它也会返回失败。
-
并行节点(Parallel):这种节点会同时执行所有的子节点。根据设定的策略,当满足某种条件时,会停止执行并返回结果。
-
装饰节点(Decorator):可以理解成一个修改节点。用于对其子节点进行功能的扩展、修饰或修改。
执行节点(叶节点): 执行节点(Action Node)是行为树中的叶子节点,表示具体的行为或操作,如移动、跳跃、攻击等。主要包括条件节点(Condition)行为节点(Action)。
-
条件节点(Condition):判断动作条件是否满足,如果满足则返回Success,否则返回Failure。
-
行为节点(Action):执行某个具体的动作或行为,例如移动、攻击、使用技能等。
自定义AI的行为树
AI行为表 自定义AI类似于一个顺序节点,它拥有一个AI行为表,在表中可以添加AI行为节点(叶节点),你需要在AI行为节点的AI行为函数中设计执行条件和行为。当AI行为节点返回假的时候,会接着执行下一个AI行为节点,返回真时则会直接打断AI行为节点,后面的AI行为节点也不会再执行。例如AI行为表中第一个AI行为节点,当单位在施法时会返回真,打断之后的AI行为节点,直到单位施法完成后返回假,之后的AI行为节点才会执行。
AI行为表执行AI行为节点的顺序 AI行为表执行AI行为节点的顺序是表结构从上到下也就是1~N,例如图例中的AI行为表则是1开始12最后。
AI行为表执行周期 AI行为表会每15帧执行一次。
AI参数表中的参数(key)解释
默认AI
- __ai_max_reset_range :单位的重置距离,类型:数值。当单位的生成点超出此范围便会强制返回
- __ai_born : 单位的生成点,类型:点。用于记录单位的生成点
- __ai_target :当前单位锁定的敌人,类型:单位。用于单位进行追击和攻击
- __attacked_timer : 攻击计时器,类型:计时器。用于控制单位追逐敌人的时间
- __ai_walk_target : 单位当前需要移动到的目标点,类型:点。用于非战斗时让单位移动到目标点
- __ai_force_back : 单位是否被强制返回,类型:布尔。为真时会激活强制返回
- __ai_battle_walk_target:单位战斗时需要移动到的目标点,类型:点。用于战斗时让单位追击到目标点
- __next_skill : 单位将要释放的技能,类型:技能。用于单位释放技能
- __ai_cast_timer : 技能计时器,类型:计时器。用于控制单位技能释放流程
沿路线移动
-
path : 路线 数组,类型:数组
<
点>
。用于存储单位需要行走的路线点 -
attack_range :搜敌范围,类型:数值。单位搜敌时的AI搜索器的搜索范围
-
cycle : 是否循环路线,类型:布尔。用于判断单位是否循环路线行走,走到终点后会返回第一个点重新行走
-
daze_timer : 发呆计时器,类型:计时器。用于控制单位发呆行为的计时器
-
pursue_time : 追击时间,类型:数值。单位追击敌人的时间
-
pursue_timer : 追击计时器,类型:计时器。用于控制单位追击敌人的行为
-
counter_attack : 攻击计时器,类型:计时器。用于控制单位攻击敌人的行为
-
target_unit : 目标单位,类型:单位。单位移动和攻击的目标
-
only_return : 强制返回判断,类型:布尔。当超出追击距离时此布尔为真,会触发单位强制返回
-
target_point_battle : 敌人目标点,类型:点。用于让单位追击到敌人附近的点
-
to_counter_point :返回起点判断,类型:布尔。当超出追击距离时为真,会触发单位强制返回
-
counter_point : 反击起点,类型:点。单位开始追击敌人前的自身坐标
-
pursue_distance : 追击距离,类型:数值。单位追击敌人时的最大追击距离,超出会触发返回
-
next_skill : 单位将要释放的技能,类型:技能。用于单位释放技能
-
target_point : 路线点的坐标,类型:点。用于单位按照路线行走的坐标
-
daze_time : 发呆时间,类型:数值。单位抵达每一个路线点时暂留的时间
-
path_index : 路线数组下标,类型:数组。用于获取单位当前所处的路线点,和下一个目标点
-
cast_skill : 技能计时器,类型:计时器。用于控制单位技能释放流程 召唤物跟随
-
last_patrol_time : 上次巡逻的时间,类型:数值。召唤物开始执行巡逻行为时的时间
-
patrol_frequency : 召唤物巡逻频率,类型:数值。召唤物巡逻的间隔时间
-
patrol_range : 召唤物巡逻范围,类型:数值。召唤物的巡逻范围
-
search_range : 召唤物搜敌范围,类型:数值。召唤物AI搜索器的搜敌距离
-
target_unit : 目标单位,类型:单位。单位当前锁定的敌人
-
last_move_time : 主人上次移动的时间,类型:数值。用于记录召唤物主人停止移动的时间
-
stay_time : 主人停留时间,类型:数值。用于判断召唤物巡逻,当此时间小于主人停止移动的时间,召唤物开始巡逻流程
-
facing_to_master : 召唤物是否在停留时朝向主人,类型:布尔。当为真时,召唤物在停留时会朝向主人
-
facing_to_master_timer : 监测召唤物朝向计时器,类型:计时器。召唤物朝向主人流程控制计时器
-
master : 召唤物的主人,类型:单位。召唤物的主人,用于召唤物的行为控制
-
order_move : 召唤物其他运动行为的坐标点,类型:点。例如召唤物追击到敌人附近的点,召唤物跟随主人移动的点,随机移动的点
-
next_skill :召唤物将要释放的技能,类型:技能。用于召唤物释放技能
-
cast_skill : 技能计时器,类型:计时器。用于控制召唤物技能释放流程