前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >行为树behavior3go介绍

行为树behavior3go介绍

作者头像
李海彬
发布2018-07-26 11:00:34
2.7K0
发布2018-07-26 11:00:34
举报
文章被收录于专栏:Golang语言社区Golang语言社区
概要

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

本文介绍一个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

如果不想在本地搭behavior3editor,可以使用官方提供的在线编辑器,网址为:http://editor.behavior3.com

behavior3go源代码分析

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

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

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

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

  • BehaviorTree 代表一棵行为树,以下是摘录主要的代码:
代码语言:javascript
复制
 1type BehaviorTree struct {
 2
 3    ...
 4
 5    root IBaseNode
 6
 7    ...
 8}
 9
10// BehaviorTree::Load 构建行为树
11func (this *BehaviorTree) Load(data *config.BTTreeCfg, maps *b3.RegisterStructMaps, extMaps *b3.RegisterStructMaps) {
12
13    ...
14
15    // Create the node list (without connection between them)
16    ...
17
18    // Connect the nodes
19    ...
20
21    this.root = nodes[data.Root]
22}
23
24// BehaviorTree::Tick 执行一次行为树
25func (this *BehaviorTree) Tick(target interface{}, blackboard *Blackboard) b3.Status {
26
27    ...
28
29    /* TICK NODE */
30    var state = this.root._execute(tick)
31
32    ...
33
34    return state
35}
  • BevTreeConfig 配置类,读取json文件
  • Blackboard 一颗行为树共享数据的地方
  • Tick 通过该类对象可以获取 BehaviorTree、Blackboard等对象引用
  • BaseNode、BaseNodeWorker 行为树节点基类 每个节点执行tick()时,会返回一个状态值 行为树的原理,就是利用树分叉、每个节点执行后返回的状态值的不同,从而产生不同的行为分支 总共有4种状态,如下定义
代码语言:javascript
复制
1const ( 
2SUCCESS Status = 1 
3FAILURE Status = 2 
4RUNNING Status = 3 
5ERROR Status = 4 
6)
  • RUNNING状态该节点 本次执行尚未完成行为 其余返回值均代表该节点行为执行完毕 自定义的Composite,可以根据子节点返回的状态指,做特殊的分支流向
  • Composite 通过继承它,来组织一组行为,确定分支走向
  • Action 通过继承它,来定义一个具体的行为
  • Decorator 通过继承它,来定义一个作用于行为的约束
  • Condition 通过继承它,来定义一个返回成功或失败的条件
  • 其他 behavior3提供了一系列基本的Composite、Action、Decorator实现

实例分析

如下图,一颗行为树:

执行结果为:

代码语言:javascript
复制
1log 
2log 
3wait 3000ms 
4log

技能与行为树

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

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

游戏类型

技能情况

MMO游戏

瞬发、AOI范围、无状态

MOBA游戏

持续、多段伤害、位移、有状态

IO游戏

看玩法。MMO型技能;MOBA型技能 皆有

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

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

行为树如下:

(后注1:上图三段式攻击还不是很严谨,2、3分支,需要在action节点前增加一个condition节点来判断是否玩家在指定的时间间隔内请求普通攻击。) (后注2:上图三段式攻击,MyMax Decorator节点表述也可能会造成误解。另外三段式攻击行为树其实 Decorator节点可以不用)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-06-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Golang语言社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • behavior3go介绍
  • behavior3editor介绍
  • behavior3go源代码分析
  • 实例分析
  • 技能与行为树
  • 使用behavior3go,制作3段式攻击技能
相关产品与服务
腾讯云代码分析
腾讯云代码分析(内部代号CodeDog)是集众多代码分析工具的云原生、分布式、高性能的代码综合分析跟踪管理平台,其主要功能是持续跟踪分析代码,观测项目代码质量,支撑团队传承代码文化。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档