思维导图
文字版:
7 用脚本写现实世界的行为树
7.1 概述
-
行为树对于AI程序员来说
-
易于编程实现和使用
-
快速搭建
-
易扩展
-
-
《阿玛拉王国:惩罚》 Kingdoms of Amalur: Reckoning
-
上层脚本
-
底层引擎C++
-
设计团队
-
对行为快速迭代
-
-
程序团队
-
专注算法特性
-
引擎对行为树的处理
-
-
代码示例下载
-
7.2 架构
-
行为树中每个节点都是一个行为(behaviour)
-
预设条件(precondition)
-
动作(action)
-
-
行为树伪代码,递归调用
-
类
-
Behavior
-
行为
-
-
BehaviorMgr
-
记录所有加载的Behavior实例
-
-
BehaviorTree
-
7.3 用脚本定义行为
-
原因
-
快速迭代开发
-
团队开发
-
设计人员脚本快速上手
-
程序员仅需要编写脚本与C++引擎的通信接口,而不用盯在游戏AI行为上
-
-
-
Lua
-
table
-
precondition
-
behavior
-
-
7.4 代码示例
-
类
-
LuaWrapper
-
管理所有与Lua运行时的交互
-
-
NTreeNode
-
通用的树类
-
-
7.5 与游戏引擎集成
-
通常引擎需要支持重新加载Lua虚拟机的功能?
7.6 脚本的隐患
-
性能
-
Lua
-
带垃圾回收(GC,Garbage Collected)
-
虚拟机内部的所有数值变量number都是用浮点数表示的
-
-
需要保证游戏帧率稳定
-
所有的Lua内存分配由引擎中实现的块内存分配器接管
-
主动在确定的时间调用GC,预防Lua的垃圾收集器在游戏运行时不可控GC
-
修改Lua源码,用传统整形取代浮点数,且脚本内避免负责的数学运算
-
-
-
职责
-
设计师
-
编写AI行为脚本
-
-
工程师
-
代码审查 code review
-
定期组织团队进行代码审查
-
-
7.7 进阶
-
理想情况下,我们应该用数据驱动的形式定义行为树,然后再游戏运行时加载数据,实例化行为树。这样我们就可以开发外部工具来编写行为树,以及维护行为树间的引用关系。
XMind - Trial Version