[Unity插件]Lua行为树(一):BehaviorDesigner源码分析
BehaviorDesigner是Unity上的一款行为树插件,不过这个插件是用C#编写的,编写出来的行为树也是依赖于C#的,不利于热更,所以有必要写一个lua版本的。
首先下载BehaviorDesigner这个插件,其中部分源码编译在Behavior Designer\Runtime\BehaviorDesignerRuntime.dll中,可以使用.NET Reflector这个工具进行反编译,然后将反编译后的类文件保存,然后用VS打开,就可以方便地查看源码啦。这个插件是自带pdf文档的,所以这里的源码分析也是源码结合文档进行说明的。
1.Task
Task类有一套和MonoBehaviour相似的API(非继承MonoBehaviour),是所有节点的基类。
a.OnAwake:只会被调用一次,当行为树enable时调用,类似于构造器。
b.OnStart:在节点开始执行时会被调用,一般用于重置变量。
c.OnUpdate:每帧调用。
d.OnEnd:在节点执行返回成功或者失败时调用。
e.OnPause(bool paused):当行为树暂停或者恢复时调用。
f.OnBehaviorComplete:当行为树完成执行时调用。
Task的生命周期:
2.ParentTask
ParentTask类是Composite节点和Decorator节点的基类。
a.CanRunParallelChildren:当前节点是否为Parallel节点。
b.CurrentChildIndex:当前激活的子节点索引。
c.CanExecute:当前节点(父节点)能否执行。
d.Decorate:修改当前状态。
e.OnChildExecuted:子节点执行时调用。
f.OnChildStarted:子节点开始执行时调用。
3.BehaviorTree
BehaviorTree是挂在GameObject上的,同时也是行为树的入口。BehaviorTree继承Behavior,Behavior在Start方法会调用EnableBehavior,然后会创建一个空物体并且挂上Behavior Manager脚本。Behavior Manager会在Update方法中执行每一棵行为树(Behavior Manager管理整个场景的行为树)。
[Unity插件]Lua行为树(一):BehaviorDesigner源码分析的更多相关文章
- Lua官方文档与源码分析
https://www.lua.org/source/5.3/ http://www.cppblog.com/airtrack/archive/2012/09/19/191233.html https ...
- [Unity插件]Lua行为树(三):组合节点Sequence
Sequence的继承关系如下: Sequence->Composite->ParentTask->Task 上一篇已经实现了简单版本的ParentTask和Task(基于Behav ...
- [Unity插件]Lua行为树(十三):装饰节点完善
之前介绍了组合节点中三大常用的节点:BTSequence.BTSelector和BTParallel,一般来说,这三种就够用了,可以满足很多的需求. 接下来可以完善一下装饰节点,增加几种新的节点. 1 ...
- [Unity插件]Lua行为树(十二):行为树管理
之前运行的行为树,都是一颗总树,那么实际上会有很多的总树,因此需要对行为树进行管理. BTBehaviorManager.lua BTBehaviorManager = {}; local this ...
- [Unity插件]Lua行为树(十一):组合节点Parallel
Parallel节点类似Sequence节点,不同在于Parallel会每帧执行所有的节点.当所有节点返回成功时返回成功,当其中一个节点返回失败时,返回失败并且结束所有的子节点运行. 例如说,给Seq ...
- [Unity插件]Lua行为树(七):行为树嵌套
在上一篇的基础上,可以测试下行为树的嵌套,所谓的行为树嵌套,就是在一棵行为树下的某一个分支,接入另一棵行为树. 以下面这棵行为树为例: TestBehaviorTree2.lua TestBehavi ...
- [Unity插件]Lua行为树(六):打印树结构
经过前面的文章,已经把行为树中的四种基本类型节点介绍了下.接下来可以整理一下,打印一下整棵行为树.注意点如下: 1.可以把BTBehaviorTree也当作一种节点,这样就可以方便地进行行为树嵌套了 ...
- [Unity插件]Lua行为树(五):装饰节点Repeater
Repeater:重复执行子节点,直到一定次数 特点如下: 1.执行次数可以是无限循环,也可以是固定次数 2.一般来说,子节点的执行返回状态不会影响Repeater节点,但可以设置当子节点返回失败时, ...
- [Unity插件]Lua行为树(四):条件节点和行为节点
条件节点和行为节点,这两种节点本身的设计比较简单,项目中编写行为树节点一般就是扩展这两种节点,而Decorator和Composite节点只需要使用内置的就足够了. 它们的继承关系如下: Condit ...
随机推荐
- 阅读<All Digital VCXO Replacement for Gigabit Transceiver Applications>笔记---XAPP589
阅读<All Digital VCXO Replacement for Gigabit Transceiver Applications>笔记---XAPP589 1. 2. 外部设备能为 ...
- MySql 常见错误代码大全 VV2
从机一直1593错误,排查了半天发现是从的配置文件中的server-id没改导致,此低级错误记录下警醒自己 B.1. 服务器错误代码和消息 服务器错误信息来自下述源文件: · 错误消息信息列在shar ...
- 实现类QQ的编辑框
第一步,平面效果.Windows系统有几个消息专门用来处理Windows组件的边框部位,那就是WM_NCCALCSIZE和WM_NCPAINT这两个消息,从消息名字看来NC这个就代表着No Clien ...
- pm2 常用命令
pm2 是一个带有负载均衡功能的Node应用的进程管理器.当你要把你的独立代码利用全部的服务器上的所有CPU,并保证进程永远都活着,0秒的重载, PM2是完美的.它非常适合IaaS结构,但不要把它用于 ...
- xftp找不到匹配的outgoing encryption 算法 怎么解决
alert("找不到匹配的outgoing encryption 算法"); 原因,是ssh登录本地终端缓存了相关的安全确认信息: 远端的ssh服务升级后,其对应的加密算法均作了升 ...
- PREV-9_蓝桥杯_大臣的旅费
问题描述 很久以前,T王国空前繁荣.为了更好地管理国家,王国修建了大量的快速路,用于连接首都和王国内的各大城市. 为节省经费,T国的大臣们经过思考,制定了一套优秀的修建方案,使得任何一个大城市都能从首 ...
- 【占位符替换】替换String中的占位符标志位{placeholder}
概述 占位符替换, 占位符表示为:{placeholder}; 示例:替换如下{xxx}占位符中的内容 "名字:{name},年龄:{age},学校:{school}" 提供了两种 ...
- PAT 甲级 1001 A+B Format (20)(20 分)
1001 A+B Format (20)(20 分) Calculate a + b and output the sum in standard format -- that is, the dig ...
- Hive - ORC 文件存储格式【转】
一.ORC File文件结构 ORC的全称是(Optimized Row Columnar),ORC文件格式是一种Hadoop生态圈中的列式存储格式,它的产生早在2013年初,最初产生自Apache ...
- PopupWindows 在2.3.3下报java.lang.NullPointerException
03-05 01:20:56.040: E/AndroidRuntime(1396): java.lang.NullPointerException 03-05 01:20:56.040: E/And ...