(本文为翰者学堂学员 陈杰 投稿)
虚幻的AI系统是作为单独的一个对象独立出来的(行为树),事实证明这也的确是非常明智的,AI的行为用树状来表示,对于人类思维是非常友好的表现形式。
负责AI的开发者们,只需要利用程序设计师事先建立好的函数、事件分发器、暴露出来的变量等接口进行行为规划,同时我们可以通过黑板(Blackboard)进行类似蓝图一样的记录变量操作,并以此操控变量。接下来,我们将使用简单的RPG的机器人AI浅析下行为树系统。
先看一下最终的效果:
https://www.bilibili.com/video/av25876783
作为一个RPG,简单AI的行为分为两种主要形态,如下图所示:
主要通过是否锁定敌人的标记来区分状态,首先我们在黑板建立敌人(Enemy)变量,通过这个变量的存在与否来控制AI的两种状态,因此两种状态是有顺序的,我们选用Selector来分支,类似这样:
我们这时候就可以思考未发现敌人AI应该做的事情,例如巡逻,在一定范围里警戒敌人等等。因为此时这些动作都是等同的(即同一种状态下没有任何因素,导致Task的发生与否),我们就选用Sequence的节点来进行分支,建立两个Task事件:一个是找寻敌人,一个是巡逻,最终效果如下:
下图为两个Task的主要实现节点:
FindEnemy Task返回到黑板一个Object值Enemy:
Find_NavPoint Task返回到黑板的一个Vector值NavPoint:
考虑下发现敌人后怎么处理呢?可以简单处理如下:
因为我们一直在对距离进行判断,所以我们可以建立一个判断距离的 DistanceWithEnemy Service返回到黑板一个距离的Float值Distance:
通过距离的数值调用不同的Task事件就能简单的完成这个RPG的简单AI,明显这些Task不是同等的(即同等状态下,事件Task的发生与否是有条件的),我们此时就选用Selector来分支状态:
再回去看看逻辑图,我们分别制作相应的Task如下:
首先是
以上move,rotation都是虚幻内置的Task
接下来↓:
AIFire Service(这里用Service是为了我的连招判定,大家也可以写Task)调用人物上自己写的攻击函数:
然后是↓:
ClearEnemy Task 修改黑板的Enemy、Distance值等:
最后行为树的效果如下:
对应的逻辑图如下:
一个简单的RPGAI就制作出来了,如果你有需要,还可以添加寻找武器,捡起武器,武器子弹不足,换弹夹,扔枪等等动作,其基本原理都是相通的。
那么接下来,这部分就交给大家发挥自己的想象了!
需要本项目蓝图的朋友,可以申请下方的学习QQ群,获取下载地址。
(公众号二维码)
让天下没有难学的技术
公众号:虚幻学堂
QQ群 : 453114825
腾讯课堂:丁树凯ue4
翰者学堂:www.hanzhe.com
-
专家劝百姓拿出三分之一存款买房热离心泵 今年首场寒潮最强雨雪下在哪 上海螺杆泵20 10岁女孩食用面包店售卖面包身亡热上海离心泵20 胡鑫宇遗体发现地与其学校一墙之隔热上海化工泵21 强盛集团法人孙红雷直播回应剧迷上海磁力泵49 女子晒老家镇上25万买的108平房子离心泵54 民政局开工 男子拍到仅两对新人结婚磁力泵 返乡年轻人挤爆咖啡店螺杆泵 刘銮雄拍卖76只爱马仕包螺杆泵 胡鑫宇家属正在申请异地公安侦查磁力泵 河南矿山回应3名员工各领500万奖金化工泵(0) 回复 (0)