behaviac组件的基本运作机制就是在运行时端(C#)和编辑器通过元信息进行交互,如图1所示。其中,元信息里面包含了类自身的描述、属性、方法及类的实例等。
图1 基于元信息的编辑器和运行时端的交互
在运行时端,也即游戏代码端,通过注册(C#通过标记Attribute的方式)并导出供行为树引擎和编辑器使用的XML元信息。运行时端主要是由程序员编写Agent的子类及其属性和方法,然后调用相关接口将这些元信息导出,就可以在编辑器中对这些元信息进行使用。
在编辑器中也可以创建和编辑元信息。在项目开始初期,也就是程序员还没把代码写出来之前,策划就可以自己手动的创建一些Agent子类、属性和方法等元信息。这样可以加速游戏原型的创建,也就是策划不用等程序员,就可以进行游戏原型的编辑。
整个工作流程主要分为以下几个步骤:
1 注册元信息
C#中编写的游戏类从behaviac.Agent派生,并通过相关的Attribute来标记元信息:
- 类:TypeMetaInfo
- 成员属性:MemberMetaInfo
- 成员方法:MethodMetaInfo
这3个类都可以接受诸如显示名字,描述等更多参数。详细请参考代码。
如下代码样例所示:
2 导出元信息
由于C#代码中已经包含了各种Attribute来描述元信息,因而导出相比C++要简单:
- Agent子类的实例通过Agent.RegisterInstanceName<***>(…)来进行注册。
- 调用Workspace.Instance.FilePath设置元信息文件导出的位置。
- 调用Workspace.Instance.ExportMetas(…)导出元信息文件。
如下代码样例所示:
更多细节可以参考behaviac组件C#源码中附带的integration/BattleCityDemo工程的BehaviacSystem.cs文件。