行为树behavior3go介绍

社区零食大礼包限量发售:

(豆干,牛肉丝,创意福袋等四川特产)

概要

在游戏开发中,以状态切换来驱动其执行流程的系统,引入行为树可以大大简化编码和配置。

本文介绍一个golang行为树库 - behavior3go,并举例如何使用behavior3go来制作技能。

behavior3go介绍

behavior3go 是 behavior3系列 的go语言版本。

最初是behavior3js,是为java做的一个行为树库。

目前支持的语言有:

behavior3js (java,官方维护)

behavior3py (python,官方维护)

behavior3go (go)

behavior3cpp (c++)

behavior3-lua (lua)

以上均可以在github上找到。

behavior3go github网址为:https://github.com/magicsea/behavior3go

behavior3editor介绍

behavior3editor是官方提供的编辑器,一个web应用。

github网址为:https://github.com/behavior3/behavior3editor

behavior3go源代码分析

behavior3go代码量非常少,且设计优良。

展示了go语言版类继承、多态的实现方法;go语言反射机制的应用

是非常好的golang语言及行为树教材。

废话不再多说,直接上图:

BehaviorTree

代表一棵行为树,以下是摘录主要的代码:

BevTreeConfig

配置类,读取json文件

Blackboard

一颗行为树共享数据的地方

Tick

通过该类对象可以获取 BehaviorTree、Blackboard等对象引用

BaseNode、BaseNodeWorker

行为树节点基类

每个节点执行tick()时,会返回一个状态值

行为树的原理,就是利用树分叉、每个节点执行后返回的状态值的不同,从而产生不同的行为分支

总共有4种状态,如下定义

RUNNING状态该节点 本次执行尚未完成行为

其余返回值均代表该节点行为执行完毕

自定义的Composite,可以根据子节点返回的状态指,做特殊的分支流向

Composite

通过继承它,来组织一组行为,确定分支走向

Action

通过继承它,来定义一个具体的行为

Decorator

通过继承它,来定义一个作用于行为的约束

Condition

通过继承它,来定义一个返回成功或失败的条件

其他

behavior3提供了一系列基本的Composite、Action、Decorator实现

实例分析

如下图,一颗行为树:

执行结果为:

技能与行为树

技能根据其复杂程度,可以分为无状态技能和有状态技能

比如对一些游戏类型进行考察:

显然如果做MOBA型技能时,引入行为树,则可以定义实现一些基础攻击行为。然后就可以通过配置,组合出各种形式的技能。

使用behavior3go,制作3段式攻击技能

行为树如下:

(后注1:上图三段式攻击还不是很严谨,2、3分支,需要在action节点前增加一个condition节点来判断是否玩家在指定的时间间隔内请求普通攻击。)

(后注2:上图三段式攻击,MyMax Decorator节点表述也可能会造成误解。另外三段式攻击行为树其实 Decorator节点可以不用)

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180623B1E9CH00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券