Lua Behavior Tree For Unity3D(Lua描述行为树For Unity3D)

行为树(BTTree)笔记

为何是Lua版本的行为树

目前国内的手机游戏都标配热更新功能,而游戏AI天然也是MMO游戏的一个标配,好比说挂机的AI,宠物的AI等等。git

提及如何用更简单的方式开发AI功能,你们都会想到使用状态机或行为树,它们能很大程度上帮助咱们理清思惟逻辑,让AI变的更加有趣生动。github

目前不少Unity3D项目都是把Lua作为脚本语言,好比咱们项目就是Lua作逻辑开发的3DMMOARPG的游戏,本文分享一下咱们项目中使用的Lua版本行为树。json

 

behavior3

Behavior3框架提供了一组工具和开放规范,为您建立、设计和使用行为树应用于游戏、模拟、机器人和其余基于代理应用程序。浏览器

  • 提供在线可视化地编辑器,而且提供编辑器源代码,你能够下载后部署到本地,而且扩展它功能。
  • 多代理体系结构,遵循一个简单而强大的架构在一个正式的和一致的基础上,优化控制多个代理
  • 使用一个开放的和简单的格式来描述行为树(json),所以您能够很容易地把它加入到本身的库,工具或框架中

 

behavior3官网:http://behavior3.com/架构

behavior3的lua版本 :https://github.com/nottvlike/behavior3lua框架

 

注:本文部分截图和behavior3官网或github的lua版本有出入,由于咱们项目组对lua版本的behavior3的作过修改。编辑器

 

编辑器

浏览器访问:http://editor.behavior3.com/#/dash/projects函数

选择Project - New Project - 输入Name  - 点击 Editor ,网站会对当前浏览器编辑的数据进行保存,无需注册登陆就在在线编辑本身的行为树。工具

image

导入已有的行为树

选择 Project - Import - Tree as Json,粘贴AI.json数据,完成由Json数据导入成行为树性能

 

导出行为树

选择 Project - Export - Tree as Json,选择所有内容并复制,粘贴到AI.json,完成由AI树转换成Json数据

 

行为树基础知识

请提早了解行为树的基础概念,我列几点:

每一帧都会遍历全部的节点 (从性能角度能够每逻辑帧遍历一次)

执行顺序:从上往下,从左往右

 

Composites(全部可用的类型)

下面以实现一个简单的宠物AI来解释各节点的用法。注:我列出的节点类型解释和使用方法是根据本身的理解所写,并不是官方文档的解释。

 

 

BTPrioritySelector(优先选择)

若是当前节点的前置条件没有,则置空。

对于最上层的顶节点,可使用它

 

BTSequence(序列)

若是并行节点有多个子节点,同级的节点中,上一个返回true,下一个节点才会执行。

示例:与主人距离大于18这个节点为序列节点,有两个叶子节点,当ClearBattleState返回True,TeleportToMaster才会被执行

image

而只有序列节点的全部叶子节点都返回true,这个节点才算执行结束,才会进入下一个节点

 

BTParalled(并行)

 

 

 

BTParableFlexible(散列)

 

 

Actions(动做/执行函数)

放在最末端的叶子节点上,用于执行函数

能够给它添加前置条件(isFarFromMaster()) ,给函数传参数(DoFollowMaster(sqrDistance = 4)),示例:

image

 

给方法传参数

若是在行为树给方法传递多个参数,在lua端如何接受传递的参数呢?

在lua的方法中:使用p.参数名1,p.参数名2,获取相应位置的参数

 

在Unity3D中调试行为树

咱们目前是在C#端结合Unity开放的编辑器接口,编写了GizmosHelper,便于在运行时对行为树进行调试。

主要原理:

读取AI.jso的数据,获取节点坐标、标题,由点连线,线组成树状,还原成在behavior编辑器的树状

若是某个节点及其子节点的状态为Active,这条线使用绿色画,不然使用白色画。 

 

注意事项

在你还大不熟悉行为树的状况下,最好不要为Sequence或Parallel的子结点加前置条件,而是直接加在Sequence或Parallel结点自己上面。。。

前置条件能够大量用在Priority结点或其子结点上这样树的逻辑会清晰一点另外,前置条件支持以“!”开头,表示对紧跟在其后面的条件进行取反再判断

相关文章
相关标签/搜索