https://www.behaviac.com/edit_types/
在类型信息浏览器中,管理了所有创建的类型信息。
创建完类型信息之后,我们可能需要在类型信息浏览器中继续修改、删除之前创建的类型信息,比如类和成员属性、方法等。
类型
类型分为三种:Agent、Struct和Enum,在新加一个类型的时候,可以相应的选择,如下图所示:
在类型信息浏览器左侧的“类型列表”中选择所要编辑的Agent子类,在右侧的“类型”属性框中,可以修改相关的参数,如下图所示:
“类型”框中的各个参数说明如下:
- 生成代码:表示该类型是否需要在点击右下方的“应用”按钮时,生成源代码文件
- 名称:该类型的名字,跟C++/C#的变量命名要求一致,不能输入非法字符
- 命名空间:该类型的命名空间,跟C++/C#的命名空间一致
- 基类:该类型的基类
- 引用类型:该类型是否为引用类型,主要提供给结构体类型使用。若是引用类型,则表示在编辑器中使用时,只能作为引用或指针使用,不能展开配置其成员属性。Agent子类都是引用类型,结构体类型可以选择为引用或非引用类型,枚举类型都是非引用类型
- 生成位置:一般不用设置,默认会统一使用工作区中配置的“代码生成位置”。但如果设置了该参数,表示当前类型会生成在指定的目录
- 显示名:用于在编辑器中显示该类型的名字,可以用中文
- 描述:用于在编辑器中显示该类型的描述内容,可以用中文
右上方的按钮说明如下:
- 新增:用于添加一个新的类型
- 删除:用于删除选中的类型
- 预览原型代码:用于预览生成的代码内容。如果没有勾选上述“类型”框中的“生成代码”选项,可以点击该按钮打开原型代码文件后,复制相关的内容到自己的代码中
- 设置头文件:在编辑器自动生成的代码中,可能需要包含项目中的头文件,这时就需要点击该按钮,弹出“C++导出设置”窗口添加需要的头文件,如下图所示:
实例
在类型信息浏览器中部位置的“实例名称”列表中,列举了当前选中的Agent子类的所有全局实例名。
在其右侧的“新增”按钮用于添加一个实例名,“删除”按钮用于删除当前选中的实例名,如下图所示:
在文档《教程三:Agent实例》中,有对实例的详细使用说明。
成员
在类型信息浏览器中下部位置的“成员类型”分为Property、Method和Task:
- Property:成员属性
- Method:成员方法
- Task:任务,用于定义子树调用的接口原型
属性
“成员列表”根据上面选择的“成员类型”,列出了所有的成员;“筛选字符”用于列举自己指定字符的所有成员,即快速检索自己所需的成员,如下图所示:
选择某个属性后,就可以在下面的“属性”框中查看该属性的各种参数了:
- 名字:该属性的名字,跟C++/C#的变量命名要求一致,不能输入非法字符
- 类型:该属性的类型。如果勾选了后面的“数组?”,则表示该类型为数组类型
- 公开:该属性是否为public,跟C++/C#中的概念一致
- 静态:该属性是否为static,跟C++/C#中的概念一致
- 只读:该属性是否只读。如果为只读,那么在赋值节点中,不能作为左值被赋值,只能读取该值
- 局部变量:表示该属性是否为局部变量。如果是局部变量,那么只在当前打开的行为树中使用,否则,是普通的成员属性,隶属于当前Agent子类,可用于任何行为树
- 默认值:该属性的默认初始值,会自动生成在类型的构造函数中
- 显示名:用于在编辑器中显示该属性的名字,可以用中文
- 描述:用于在编辑器中显示该属性的描述内容,可以用中文
右侧的“新增”按钮用于添加新的属性,“删除”按钮用于删除选中的属性,“往上”和“往下”按钮用于调整选中属性的相对位置。
方法
在类型信息浏览器中,将“成员类型”选择为“Method”,则在“成员列表”中列出了所有的成员方法,如下图所示:
选择某个方法后,就可以在下面的“属性”框中查看该方法的各种参数了:
- 名字:该方法的名字,跟C++/C#的变量命名要求一致,不能输入非法字符
- 返回值类型:该方法的返回值类型。如果勾选了后面的“数组?”,则表示该类型为数组类型
- 公开:该方法是否为public,跟C++/C#中的概念一致
- 静态:该方法是否为static,跟C++/C#中的概念一致
- 显示名:用于在编辑器中显示该方法的名字,可以用中文
- 描述:用于在编辑器中显示该方法的描述内容,可以用中文
- 参数:该方法的参数列表,可以添加和删除
任务
在类型信息浏览器中,将“成员类型”选择为“Task”,则在“成员列表”中列出了所有的任务,如下图所示:
任务的编辑跟成员方法的编辑相同,任务只是定义了一个接口原型,用于事件的参数传递。关于事件的更多用法,请参考文章《事件处理》。
最后,编辑类型信息的过程中,不要忘记点击右下方的“应用”按钮,保存和生成类型信息。
生成代码
编辑完类型信息之后,点击右下方的“应用按钮”生成类型信息相关的源码文件。
如果对上面的Agent类型“FirstAgent”勾选了“生成代码”选项,那么在其“生成位置”中,会自动生成该类型的源码文件(点击左下方的“打开代码生成位置”按钮),如下图所示:
还有一种情况就是对Agent类型没有勾选“生成代码”选项,或者是老版本的用法,都是程序员手工编写的Agent类型。那么在点击右下方的“应用”按钮后,需要在程序端手工添加在类型信息浏览器中添加的成员属性或方法的代码。
为了提高手工编写代码的效率和准确性,点击“预览原型代码”按钮,如下图所示:
可以看到当前Agent类的原型代码如下所示,可以复制粘贴需要的成员属性或方法的定义到自己的代码中:
如果忘记了在程序端添加相应的成员属性或方法,编译的时候也会报错找不到这些在编辑器中新加的成员属性或方法,这时候就需要手工添加一下。