思维导图
文字版:
7 用脚本写现实世界的行为树 7.1 概述
行为树对于AI程序员来说
易于编程实现和使用
快速搭建
易扩展
《阿玛拉王国:惩罚》 Kingdoms of Amalur: Reckoning
上层脚本
底层引擎C++
设计团队
对行为快速迭代
程序团队
专注算法特性
引擎对行为树的处理
代码示例下载
Game AI Pro
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



