BehaviorTree

1相关文章

使用行为树(Behavior Tree)实现游戏AI

使用行为树(Behavior Tree)实现网游奖励掉落系统

行为树DEMO

从有限状态机(FSM)到行为树(Behavior Tree)

在行为树(Behavior Tree)中使用黑板(BlackBoard)

Handling Complexity in the Halo 2 AI

Halo,Halo 2游戏的人工智能设计讲座


2相关工具和库

GameBrains GameBrains:The First Behavior Tree Middleware Runtime and Editor  包含AI编辑器,生成的格式是xml。解析库。远程连接调试。

owyl A python behavior tree for implementing fast and flexible AI.

treesharp Behavior Tree Implementation in C#

libbehavior C++ Library for Implementing Reactive AI 只有c++表示的类库,没有可视化编辑工具,没有序列化格式。


3减少脚本数量

Composite Decorator 所有游戏通用,condition和action就各有各的不同了。


3.1condition

函数:TestSingle()用于测单体的属性(设计多个对象的全局性测验需要另加函数)

对象:自己、队友、敌军、所有战斗单位、建筑、全局context。


属性:血、蓝、血量百分比、蓝百分比、力量、距离自己、距离出口(这个距离XX可以提炼,但是会破坏现有结构).......  

关系:大于、小于、等于...

数值:N


buff:中毒、无敌.....

有无:true, false。


数量关系:大于、小于、等于...   (用于描述有几个处于上述的属性状态)

数量值:N


其中对象,可以根据所拥有的共同属性再分类,需要加个condition的属性  “对象类型”,然后根据所选对象类型,自动只显示相关的对象和属性。

其中buff可以合到属性中,关系是等于,数值是0,1、truefalse、或持续时间。


3.2action

函数:攻击、使用物品、休息、走、跑

参数:

        攻击:技能ID

        物品:物品ID

        走跑:位置

       攻击和物品还需要选取目标:需要的参数和上面contition中用到的一致。这些参数全作为攻击函数的参数。


这样可以用统一的方式和脚本处理,就不需要像一些文章中,每种condition都要写个脚本。



4.仍然存在的问题

4.1多个条件

上面提到的只能描述一个人,只能描述:有个敌人血量少于3,而且有个敌人力量大于5,通过sequence实现。

而不能描述有个敌人血量少于3且力量大于5。 针对这个就必须单独写个脚本了;或者改变经典的行为只有这4个node的格式,自己附加一套描述对象属性的格式。


4.2涉及多个对象

这应该属于全局context。

比如有3个敌人站在一起就放某个范围群攻技能,这就无法通过TestSingle实现,需要再加函数了, 参数是敌人数量和范围。

全局context的一些属性(比如环境、副本内造成总伤害等)还是留在TestSingle中,虽然和自己一样用不到数量关系和数量值(因为全局唯一)。

4.3持续性Action

行为树DEMO中到花店和买花放一个sequnce下,但是到花店是个持续型行为。解决方法有两个:

1.到花店不马上返回,本次AI检测不马上返回,到了花店后返回,然后到下个action买花。

2.把到花店和买花放在两个sequnce节点,买花的condition是在花店。

3.Action中只有买花,没有到花店。由买花脚本自己判断是否需要到花店。

个人认为应该才用方案3。

4.4定时与触发

这些AI行为树脚本,应该是定时检测的。但是如果有些AI却是事件触发的,比如被击中前开启无敌,死亡时掉落物品(掉落也作为AI)。

我目前能想到的是和定时脚本放到不同的行为树中,每个触发事件对应一颗行为树。

或者是延迟事件触发,还是定时检测,死亡就不能马上死亡了,要等定时器AI检测过后才死掉。


5最佳的描述解决方案

额,估计还是本体(Ontology)啊,但是解析库太少了,只有jena这个java库。









  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值