记录一次实际使用行为树。

首先是行为树库的问题。

一般情况先看看有没有优秀的,现成的库能使用,上GitHub搜索一下,找一些相关的,star比较多的。当然你也可以自己编写,看实际情况了。

采用的是behavior3,还有相应的编辑器,比较方便。地址:behavior3/behavior3editor

GitHub不好下载,Gitee可以转GitHub的链接,下载就方便了。

编辑器的问题

下载好behavior3editor相关的文件,文件长这样,behavior3editor-master.zip,解压后,文件夹里面有个BUILD.md,可以自己编译出web版的编辑器,也可以网上下载一个。编辑器的基本介绍,地址:塔防游戏的技术总结--行为树编辑器_SHIYULF的博客-CSDN博客

介绍行为树的文章,网上有很多, 这里就不赘述了。

游戏AI之决策结构—行为树 - KillerAery - 博客园 33

AI 行为树的工作原理 | indienova 独立游戏

大概概括一下行为树的流程:

逐帧执行所有行为树,每次tick时间内,每个行为树从根节点开始,根据行为树的树状结构,遍历各个子节点;根据4种类型的节点(Composites组合节点、Decorators装饰节点、Actions行为节点、Conditions条件节点),去控制行为树的走向,决定节点是否会执行;节点执行的结果会返回给父节点,父节点也可以做想要的逻辑,去控制流程走向。

比如现在有个案子,地图中若干出兵的营地,地图中间有个泉水,1个特殊怪物会逐个攻击出兵营地,然后飞到泉水,然后放技能,飞到落地点,往下一个出兵营地寻路几秒钟,遇到敌对怪物就攻击,时间到了起飞,飞到出兵营地,攻击营地,攻破营地,再飞到泉水,就这样直到所有营地全部攻破,飞到泉水就胜利了。

首先是动态路径,new一个新的Action,根据起点和终点,寻路算法,可以获得1份怪物要走的路径,但是不能一直去执行这个,只能执行1次。

那么能不能加一个东西,让上面的动作只执行1次,或者说控制执行次数。根据行为树4种节点的区分,Decorator修饰节点比较合适,new一个新的Decorator,修饰上面的节点,动态路径的action执行成功,就不再执行了。通过查看库里面已经有的装饰节点,会发现节点有一段这样的代码

let status = this.child.execute(tick);

那我们就可以控制子节点的执行,和对子节点返回的状态,再进行相应的处理。基本思路也就有了,根据子节点执行成功的次数,和我们设定的次数做比较,小于就执行子节点,大于等于就直接返回状态,不再执行子节点。

Inverter的修饰节点很常用,把子节点的状态反转。

当然还要有技能释放的action,移动的action,游戏中要有相关的系统支持才可以。

那这样是不是就行了呢,好像不是太完整,1个问题是会不停的跑技能释放的action,技能释放是有条件的,没必要一直检测技能是否能释放,等飞到目的地兵营再检测也来得及,同时还少跑了检测技能释放的复杂逻辑,那再new一个新的Node,检测是否到了目的地,那么是设置成Action还是Condition呢。Condition会好一些,因为就是为了给释放技能加个前提的条件。

特殊怪物飞到第一个兵营,攻破兵营之后,怪物会飞到地图中间的泉水,开始后续的逻辑。仔细看案子会发现,从现在开始,后面的流程开始出现重复了。都是飞到泉水,放技能,飞到落地点,向下一个兵营寻路,寻路中间遇到敌对怪物就进行攻击,一定时间起飞,飞到兵营,攻破兵营 ,再飞到泉水。

好了,我们也可以像上面的那样的分析,拉出很多的选择分支,但是会分支很多,控制起来就比较麻烦。后续的不是重复了吗,那我们能不能写出一个完整的流程,然后也循环重复呢。

先写出一个完整的循环体流程。

我们在玩一些稍微大型的游戏,打Boss的时候应该听说过,Boss进入了第几阶段,那么根据这个,我们也借鉴一下,new出一个新的Decorator,和设置阶段状态的action,配合控制阶段action,一旦设置阶段完结,阶段的子节点不再执行。这个对后面行为树复杂起来的时候,方面了不少。

阶段限制的装饰节点有了,设置阶段状态的action也有了,那什么时候设置状态呢。我们还需要一个条件,根据案子的描述,目标建筑是否存在,比较合适,new一个新的Condition。

第一阶段的行为树。

那么第一阶段完成之后,Limit0Stage之后的所有逻辑,后续不再执行了。

先处理一下,攻破所有的兵营后,要飞到泉水中间。这个不会进入循环体中,可以先处理。

现在设置循环体的逻辑。

后面的逻辑中,设置寻路路径,是否到达目的地,目标建筑是否存在,这个几个需要动态数据。把兵营相关的数据,已数值的形式存入上述Node中间,后面用1个特殊的action驱动,去动态取想要的数据,就可以达到循环的目的了。

然后在攻破第一个兵营之后,怪物要飞到地图中间的泉水,释放技能,同样的逻辑。

飞到落地点,降落。

向兵营寻路10s中,MaxExecuteTime修饰节点,和上面的加法类似。

飞到兵营,攻击兵营

在4个阶段上面,还有一个自动驱动数据。要熟悉blackboard的用处,根据判断条件,往里面存入动态数组需要的下标,其他需要动态数据的Node,在拿到下标后取出数组中相应的数据即可。

new出的所有新的Node,根据名字,在行为树库中都要有一一的对应,即要新建单独的脚本文件和相应的类。

到此案子的功能,通过行为树如何实现,基本分析完毕了。

塔防游戏的技术总结--行为树相关推荐

  1. HTML5另类塔防游戏 -『三国战线』发布

    关于本作 游戏介绍 本游戏是一款另类塔防游戏.本作以三国这段历史为题材,提供了从颍川之战到官渡之战,官渡之战到夷陵之战,夷陵之战到五丈原之战等15个关卡.在每个关卡中,你会控制一名三国武将与出现的敌军 ...

  2. html塔防游戏,HTML5 版塔防游戏

    HTML5 版塔防游戏来自老杰的博客,本人很喜欢这款游戏.就转载到苏岳宁博客里,希望更多的朋友看到试玩这款TD游戏吧!下面是游戏进行时的截图: 下文来自老杰的博客: ---------------- ...

  3. Unity塔防游戏的制作与实现

    一.游戏场景的搭建 首先,我们需要创建一个新的Unity场景,并将场景设置为2D模式.然后,我们需要导入一些必要的素材,如地图.塔.怪物.子弹等.我们可以从Unity Asset Store中下载这些 ...

  4. [Cocos2d塔防游戏开发]Cocos2dx-3.X完成塔防游戏《王国保卫战》--简介+代码+资源

    学校实训项目需要用cocos2dx做一款塔防游戏,因为时间与制图技术.创意原因无法进行原创,碰巧找到了皇家守卫军这款游戏的图片资源,决定用cocos2dx来重现这款经典塔防游戏. 本项目已完成3分之1 ...

  5. HTML5 塔防游戏分享

    使用 HTML5 开发的塔防游戏. 作者语:我比较喜欢塔防类的游戏,前段时间非常流行的植物大战僵尸就属于塔防游戏.最近看到有人用 HTML5 写出了很多非常有趣的作品,我忍不住也尝试了一番,于是有了这 ...

  6. HTML5另类塔防游戏 -《三国战线》公布

    关于本作 游戏介绍 本游戏是一款另类塔防游戏.本作以三国这段历史为题材,提供了从颍川之战到官渡之战.官渡之战到夷陵之战.夷陵之战到五丈原之战等15个关卡.在每一个关卡中,你会控制一名三国武将与出现的敌 ...

  7. 【HMS Core案例分享】华为分析 X 江湖游戏 | 揭秘塔防游戏的增长秘籍

    江湖游戏是一家集网络游戏发行.运营和服务于一体的公司,于2018年成立,是国内新兴的游戏发行商之一.江湖游戏凭借着3D欧美卡通塔防巨作<塔塔帝国>,以及诙谐幽默的<泡面三国>, ...

  8. 开发者已将您从测试计划中移除_深度合作,Ohayoo定制模式为开发者提供更全面的支持|塔防|游戏|休闲游戏|ohayoo|塔防游戏...

    Ohayoo和成都这个城市的缘分由来已久.据统计,在过去一年多时间里,Ohayoo为成都地区超过50家开发者提供了产品调优上的建议,与超过20家开发者建立了实质性的合作关系,并储备了待上线产品10余款 ...

  9. (译)如何使用cocos2d制作一个塔防游戏:引子

    原文链接地址:http://www.iphonegametutorials.com/2011/04/11/cocos2d-game-tutorial-how-to-build-a-tower-defe ...

最新文章

  1. 【数据处理】python数据评估常用指标:ks、fpr、tpr
  2. php 中set是什么_php中set
  3. C++原子操作 atomic的使用及效率
  4. 数列互质(莫队算法)
  5. 白鹭引擎 - 显示对象的基准点与横纵坐标 ( 绘制一个来回移动的绿色方块 )
  6. c语言课程设计模块结构图,【图片】发几个C语言课程设计源代码(恭喜自己当上技术小吧主)【东华理工大学吧】_百度贴吧...
  7. 企业3级推广报单分销源码下载会员注册管理系统
  8. Python修饰符--函数修饰符 “@”
  9. 中芯国际:公司客户需求强劲 订单饱满
  10. mysql 阿里云 版本_阿里云虚拟主机mysql已经支持版本切换,支持MySQL 5.7.25
  11. linux下DNS服务器的配置
  12. HDU1847 Good Luck in CET-4 Everybody!【SG函数】
  13. linux pe系统下载,WINPE LINUX DOS 完美者U盘维护系统V8.1 正式版
  14. 大型在线考试答题系统源码 B/S架构
  15. SDRAM DQM的解释,总算明白了
  16. SQL Server数据库通过身份证号获取年龄段分布
  17. 12月29日--Java中有关类与对象的学习记录
  18. docker重启 容器自动重启
  19. Python爬虫实战三 | 蓝奏网盘抓取网盘链接信息
  20. 我对双飞翼布局理解,以及双飞翼布局的好处

热门文章

  1. 运营商建设免费WiFi是个冷笑话 钱都投给4G了
  2. JavaScript简单实现随机抽奖案例
  3. ASP,JSP,ASP.NET,PHP,HTML等软件技术交流群42173344欢迎加入! 2000人超级群
  4. MPI之点对点通信——阻塞式MPI_Send 和MPI_Recv
  5. java制作表白软件手机版下载_表白图片制作软件下载-表白图片制作 安卓版v1.0-PC6安卓网...
  6. 装机员 Ghost Win7 Sp1 64位装机9月版
  7. 房地产开发流程(详细)
  8. AE基础教程(9)——第9章 快速预览
  9. 蓝桥杯题库 算法提高非vip部分(C++、Java)代码实现(251-280)
  10. 严肃游戏(中山大学3D游戏作业1)