战斗AI设计的结果如下:最简单的战斗AI设计
【实现结果】
采用紧跟的追踪方式,Player选择了最近的目标为敌人,拖动敌人,Player跟随,当敌人距离过远时,Player没有了目标,停止移动。
采用锁定的追踪方式,无论敌人移动到哪里,Player都会移动到敌人前进行攻击
采用重择的追踪方式,在追踪敌人的过程中遇到更符合条件的目标就更换敌人
【实现过程】
采用nodecanvas辅助实现这个设计,由于目前的设计很简单,我们不用根据设计结果提炼出条件节点和行为节点,全部采用行为节点,结果如下:
使用一个Sequencer,动态遍历三个行为节点,其分别对应设计中的三个阶段。
Sequencer按从最高优先级到最低优先级(从左到右)的顺序执行其子节点,当所有子节点成功完成时返回成功,当任何子节点失败时返回失败。
行为节点采用自己所写的脚本。
- 创建一个PlayerController脚本,为其设置阵营、追踪方式和攻击目标字段。
- 创建一个PlayerManager脚本管理所有角色,其是单例模式, 并实现了SearchTargets和ChooseEnemy方法等。
- 创建FindEnemy脚本,在OnExecute中实现找到敌人
- 创建MoveToEnemy脚本,在OnUpdate中实现攻击触发、移动和追踪方式判定
- 创建AttackEnemy脚本,在OnExecute中调用PlayerController的攻击方法