行为树(BTTree)笔记

为什么是Lua版本的行为树

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

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

目前很多Unity3D项目都是把Lua做为脚本语言,比如我们项目就是Lua做逻辑开发的3DMMOARPG的游戏,本文分享一下我们项目中使用的Lua版本行为树。

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 ,网站会对当前浏览器编辑的数据进行保存,无需注册登录就在在线编辑自己的行为树。

导入已有的行为树

选择 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才会被执行

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

BTParalled(并行)

BTParableFlexible(散列)

Actions(动作/执行函数)

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

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

给方法传参数

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

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

在Unity3D中调试行为树

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

主要原理:

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

如果某个节点及其子节点的状态为Active,这条线使用绿色画,否则使用白色画。

注意事项

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

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

Lua Behavior Tree For Unity3D(Lua描述行为树For Unity3D)的更多相关文章

  1. (转)行为树(Behavior Tree)

    转自:http://www.cnblogs.com/konlil/archive/2011/04/23/2025954.html 如果要让游戏里的角色或者NPC能执行预设的AI逻辑,最简单的用IF.. ...

  2. 《Note --- Unreal 4 --- behavior tree》

    Web: https://docs.unrealengine.com/latest/INT/Engine/AI/BehaviorTrees/index.html Test project: D:\En ...

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

    原地址:http://blog.csdn.net/akara/article/details/6165421 [原创]使用行为树(Behavior Tree)实现网游奖励掉落系统by AKara 20 ...

  4. 行为树(Behavior Tree)实践(1)– 基本概念

    原文地址:http://www.360doc.com/content/15/0107/11/15099545_438831036.shtml 自从开博以来,每天都会关心一下博客的访问情况,看到一些朋友 ...

  5. lua调用java java调用lua[转载]

    转载:http://dualface.github.io/blog/2013/01/01/call-java-from-lua/LuaJavaBridge - Lua 与 Java 互操作的简单解决方 ...

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

    ——————————————————————— 谈到游戏AI,很明显智能体拥有的知识条目越多,便显得更智能,但维护庞大数量的知识条目是个噩梦:使用有限状态机(FSM),分层有限状态机(HFSM),决策 ...

  7. 用VC编译lua源码,生成lua语言的解释器和编译器

    用VC编译lua源码,生成lua语言的解释器和编译器 1.去网址下载源码 http://www.lua.org/download.html 2.装一个VC++,我用的是VC6.0 3.接下来我们开始编 ...

  8. Behavior Tree

    http://www.craft.ai/blog/bt-101-behavior-trees-grammar-basics/ https://github.com/libgdx/gdx-ai/wiki ...

  9. [Lua]Mac系统上安装Lua环境

    1.下载 Lua语言的官方网站 http://www.lua.org/ 下载最新版本的Lua环境 2.安装 解压下载包lua-5.3.1.tar.gz 打开终端Terminal 使用cd命令进入该目录 ...

随机推荐

  1. docker - 启动container时出现 [warning] : ipv4 forwarding is disabled. networking will not work

    起因 今天在一台新的centos宿主机上安装docker,由于关闭了iptables,在此之后启动container的时候会出现警告: WARNING: IPv4 forwarding is disa ...

  2. 避免循环做SQL操作

    经常犯的错误是把一个SQL 操作放置到一个循环中, 这就导致频繁的访问数据库,更重要的是, 这会直接导致脚本的性能低下.以下的例子, 你能够把一个循环操作重置为一个单一的SQL语句. foreach ...

  3. 【MUI】百度地图定位功能

    博主最近进行一款APP开发,需要用到定位功能,经过一番折腾,终于搞定,不废话,代码如下 mui.plusReady(function() { var longitude, latitude; //va ...

  4. SAP PI入门

    本教程的目的是让读者理解:SAP Process Intergration(以下简称SAP PI)是什么.我们不需要探究课题的本质,但是会讨论SAP PI的架构和不同特点.本文只会覆盖到PI的基本特点 ...

  5. 开源分享,使用Servlet实现360商城

    简介 今天翻看硬盘,无意间看到这个项目的workspace,掀起了我无尽的回忆啊,一把辛酸一把泪. 现在把这个现在看来比较low的项目分享出来,也算记录下当初菜鸟的成长之路了,也希望能够对刚入门的朋友 ...

  6. python迭代器生成器(二)

    其他内置类型迭代器 除了文件以及列表这样的实际的序列外,其他类型也有适合的迭代器. 遍历字典的经典方法是明确的获取其键的列表. 在最近的python版本中,字典有一个迭代器,在迭代环境中,会自动一次返 ...

  7. 无法将类型为excel.applicationclass的com 强制转换为接口类型的解决方法[转]

    c#解决方案EXCEL 导出 今天碰到客户的电脑在导出EXCEL的时候提示,无法将类型为 excel.applicationclass 的 com 强制转换为接口类型 excel._applicati ...

  8. Java基础语法<七> 对象与类

    笔记整理 来源于<Java核心技术卷 I > <Java编程思想> 1. 类之间的关系 依赖 users– a 是一种最明显的.最常见的关系.如果一个类的方法操作另一个类的对象 ...

  9. AngularJS 和 Bootstrap

    AngularJS Bootstrap AngularJS 的首选样式表是 Twitter Bootstrap, Twitter Bootstrap 是目前最受欢迎的前端框架. 查看 Bootstra ...

  10. 详解Android Activity---启动模式

    相关的基本概念: 1.任务栈(Task)   若干个Activity的集合的栈表示一个Task.   栈不仅仅只包含自身程序的Activity,它也可以跨应用包含其他应用的Activity,这样有利于 ...