基于U3D插件机制实现的行为树编辑器的制作方法

文档序号:11828833阅读:217来源:国知局
基于U3D插件机制实现的行为树编辑器的制作方法与工艺

本发明属于游戏开发技术领域,具体涉及一种基于U3D插件机制实现的行为树编辑器。



背景技术:

在游戏人工智能AI编程领域中,行为树(Behavior-Tree)的广泛应用已经开始逐渐取代了设计复杂而庞大的状态机(State Machine),越来越多游戏使用行为树作为AI的实现结构。

现有技术中,普遍使用Brainiac Designer工具编辑行为树,使用该工具编辑行为树时,需要首先编写出各个树节点,然后将各个编写出的树节点生成dll动态链接库,并作为插件导入到Brainiac Designer中。虽然Brainiac Designer提供了源码,但是,用户非常难以在Brainiac Designer工具定义一些满足特殊需求的树节点;此外,当编辑到一棵行为树后,由于行为树涉及数量众多的节点,因此,编程人员难以预见行为树的实现效果,导致不方便对行为树进行调试。



技术实现要素:

针对现有技术存在的缺陷,本发明提供一种基于U3D插件机制实现的行为树编辑器,可有效解决上述问题。

本发明采用的技术方案如下:

本发明提供一种基于U3D插件机制实现的行为树编辑器,包括行为树编辑模块、行为树预览模块、行为树导出模块和行为树导入模块;

所述行为树编辑模块提供行为树编辑面板,用于编辑得到一颗行为树;

所述行为树预览模块用于将所述行为树编辑模块编辑得到的行为树输入到预存储游戏场景中的某个游戏角色中,通过所述行为树控制所述游戏角色的动作,并播放所述行为树对所述游戏角色的控制过程,实现对编辑得到的行为树运行过程的预览;

所述行为树导出模块用于将预览成功的所述行为树以特定数据结构导出,供游戏运行时调用;

所述行为树导入模块用于将已导出的所述行为树再次导入到所述行为树编辑模块,通过所述行为树编辑模块对所述行为树进行改进。

优选的,所述行为树编辑模块包括行为树编辑面板以及事件监听器;

所述行为树编辑面板提供行为树绘制区域;

所述事件监听器用于对所述行为树绘制区域进行监听,具体监听过程包括:

步骤1:当监听到所述行为树绘制区域发生鼠标右键点击事件时,向被点击区域弹出操作面板,其中,所述操作面板包括:添加节点按钮、删除节点按钮、上移当前节点按钮和下移当前节点按钮;

步骤2:然后,所述事件监听器对所述操作面板中的各个按钮进行监听,并区分以下四种情况:

1)当监听到所述添加节点按钮发生按钮点击事件时,向被点击区域弹出节点类型面板,所述节点类型面板包含行为节点子按钮、条件节点子按钮、顺序节点子按钮和选择节点子按钮;然后,所述事件监听器对所述节点类型面板中的各个子按钮进行监听,如果监听到所述行为节点子按钮发生按钮点击事件时,向被点击区域添加行为节点;如果监听到所述条件节点子按钮发生按钮点击事件时,向被点击区域添加条件节点;如果监听到所述顺序节点子按钮发生按钮点击事件时,向被点击区域添加顺序节点;如果监听到所述选择节点子按钮发生按钮点击事件时,向被点击区域添加选择节点;然后,所述事件监听器对已添加到所述行为树绘制区域的行为节点、条件节点、顺序节点或选择节点进行监听,当监听到所述行为节点发生节点双击事件时,向被双击节点位置弹出包含有已配置的用于控制游戏角色的具体行为指令的选择面板;然后,当接收到所述选择面板返回的具体行为指令时,所述事件监听器保存节点标识和具体行为指令的对应关系;

当监听到所述条件节点、所述顺序节点或所述选择节点发生节点双击事件时,向被双击节点位置弹出节点属性修改面板,当接收到通过所述节点属性修改面板发送的节点属性时,所述事件监听器保存节点标识和节点属性的对应关系;

2)当监听到所述删除节点按钮发生按钮点击事件时,所述事件监听器将被 点击区域对应的节点删除;

3)当监听到所述上移当前节点按钮发生按钮点击事件时,所述事件监听器将被点击的当前按钮的子节点依次向上移动一位;

4)当监听到所述下移当前节点按钮发生按钮点击事件时,所述事件监听器将被点击的当前按钮的子节点依次向下移动一位。

优选的,所述行为树预览模块对所述行为树的运行过程进行预览,具体包括以下步骤:

S1,所述行为树预览模块设置行为树中的节点具有4个状态,分别为初始状态、悬挂状态、执行成功状态和执行失败状态;

其中,所述初始状态是指:在最初第一次执行根节点之前,行为树中所有节点均为初始状态;

所述悬挂状态是指:当某个节点正在被执行时,或者,当某个节点的任意一个子节点正在被执行且没有执行完毕时,该节点即为悬挂状态的节点;

S2,设需执行的行为树共有n层,按自上而下顺序,依次记为:第1层、第2层…第n层;其中,n为自然数;第1层即为根节点;第n层即为叶子节点,所述叶子节点均为行为节点;所述非叶节点,即:第1层节点到第n-1层节点,均为控制节点;

S3,每隔预设时间间隔,即执行一次根节点,执行方法为:

S3.1,在当前时刻,所述行为树预览模块执行第1层节点,即:读取所述第1层节点的状态,判断所述第1层节点当前是否为悬挂状态,如果是,则执行S3.2-S3.5;如果否,则执行S3.6;

S3.2,所述行为树预览模块读取各个所述第2层节点,查找到当前为悬挂状态的第2层节点,记为:节点2.x;其中,当所述第1层节点为悬挂状态时,其儿子节点中有且仅有一个节点为悬挂状态;

S3.3,所述行为树预览模块执行节点2.x的悬挂函数,同时判断所述节点2.x是否为叶子节点,如果否,则执行S3.4;否则,直接执行S3.5;

S3.4,所述行为树预览模块继续递归执行节点2.x的子孙节点的悬挂函数,直到执行到叶子节点,然后执行S3.5;其中,整根行为树有且仅有一条分支的各 节点处于悬挂状态;

S3.5,所述行为树预览模块执行叶子节点的悬挂函数;所述叶子节点的悬挂函数直接导致游戏对象的行为发生变化;

S3.6,当所述第1层节点不为悬挂状态时,所述行为树预览模块根据第1层节点的类型,遍历执行各个第2层节点,

如果某个第2层节点为行为节点,则直接执行该行为节点,并将执行结果返回给所述第1层节点;所述第1层节点根据所接收到的执行结果,改变自身状态;

如果某个第2层节点为选择节点,则该选择节点迭代执行该选择节点的各个子节点,如果某个子节点执行后返回执行失败的通知消息,则继续迭代执行其他子节点;只要存在一个子节点执行后返回执行成功的通知消息,即停止迭代,该选择节点向自身的父节点返回执行成功的通知消息,然后,所述父节点将自身状态设置为执行成功状态;否则,如果所有子节点执行后均返回执行失败的通知消息,则:所述父节点将自身状态设置为执行失败状态;

如果某个第2层节点为顺序节点,则该顺序节点迭代执行该顺序节点的各个子节点,只有存在一个子节点执行后返回执行失败的通知消息,即停止迭代,该顺序节点向自身的父节点返回执行失败的通知消息,并且,所述父节点将自身状态设置为执行失败状态;否则,只有当所有子节点执行后均返回执行成功的通知消息后,该顺序节点才向自身的父节点返回执行成功的通知消息,然后,所述父节点将自身状态设置为执行成功状态。

本发明的有益效果如下:

本发明提供的基于U3D插件机制实现的行为树编辑器,具有以下优点:可以在U3D中直接设计AI行为树,而不需要预先编辑各个树节点,从而简化了行为树编辑过程;此外,该行为树编辑器提供行为树预览功能,能够方便快速的对编辑得到的行为树效果进行预览,方便对编辑得到的行为树进行修改调试,从而全面提高了行为树编辑效率。

附图说明

图1为本发明提供的基于U3D插件机制实现的行为树编辑器的结构原理图;

图2为本发明提供的行为树预览模块执行行为树的流程示意图。

具体实施方式

以下结合附图对本发明进行详细说明:

本发明提供一种基于U3D插件机制实现的行为树编辑器,是在U3D插件机制的基础上,在U3D里面编写的一个可视化编辑行为树的工具。该工具能直接在U3D里设计AI行为树,添加各种行为树的树节点,例如,选择节点、顺序节点、行为节点或条件节点等,并能导出相应的json文件格式的行为树。当实际运行游戏时,读取记录有AI行为树的json文件,从而向游戏对象,如主角、小怪、boss等指定相应的AI行为树,实现对游戏对象的智能控制,具有高配置性和高扩展性的优势,利于策划配置和程序的可扩展。

具体的,结合图1,行为树编辑器包括行为树编辑模块、行为树预览模块、行为树导出模块和行为树导入模块。以下分别详细介绍这四个功能模块:

(一)行为树编辑模块

行为树编辑模块提供行为树编辑面板,用于编辑得到一颗行为树;即:在U3D中编辑已经构思好的一个行为树,,实现对各种树节点的添加、删除、修改参数以及查看所有节点的功能,实现行为树的编辑功能。

行为树编辑模块具体包括行为树编辑面板以及事件监听器;所述行为树编辑面板提供行为树绘制区域;

所述事件监听器用于对所述行为树绘制区域进行监听,具体监听过程包括:

步骤1:当监听到所述行为树绘制区域发生鼠标右键点击事件时,向被点击区域弹出操作面板,其中,所述操作面板包括:添加节点按钮、删除节点按钮、上移当前节点按钮和下移当前节点按钮;其中,通过上移当前节点按钮和下移当前节点按钮,实现对当前节点上移和下移的调节,通过调整当前节点的位置,最终调整了当前节点在行为树节点中的先后执行顺序,越向上靠近根节点的节点,越先被执行。

此外,当选择添加节点按钮后,会弹出行为节点、条件节点、顺序节点和选择节点面板。这里的每一个行为节点和条件节点是需要具体的代码来实现,能够使游戏中的对象产生相应的行为。属于具体的业务逻辑部分

步骤2:然后,所述事件监听器对所述操作面板中的各个按钮进行监听,其中,操作面板中的各个按钮需要具体的代码实现,能够使游戏中的对象产生相应的行为,属于具体的业务逻辑部分,在具体实现上,可使本发明提供的行为树编辑器对接业务逻辑模块,将业务逻辑模块所需的能够产生具体控制行为的代码直接传输到行为树编辑器,方便对具体行为树的编辑。

对各个按钮监听过程,可区分以下四种情况:

1)当监听到所述添加节点按钮发生按钮点击事件时,向被点击区域弹出节点类型面板,所述节点类型面板包含行为节点子按钮、条件节点子按钮、顺序节点子按钮和选择节点子按钮;然后,所述事件监听器对所述节点类型面板中的各个子按钮进行监听,如果监听到所述行为节点子按钮发生按钮点击事件时,向被点击区域添加行为节点;如果监听到所述条件节点子按钮发生按钮点击事件时,向被点击区域添加条件节点;如果监听到所述顺序节点子按钮发生按钮点击事件时,向被点击区域添加顺序节点;如果监听到所述选择节点子按钮发生按钮点击事件时,向被点击区域添加选择节点;然后,所述事件监听器对已添加到所述行为树绘制区域的行为节点、条件节点、顺序节点或选择节点进行监听,当监听到所述行为节点发生节点双击事件时,向被双击节点位置弹出包含有已配置的用于控制游戏角色的具体行为指令的选择面板;然后,当接收到所述选择面板返回的具体行为指令时,所述事件监听器保存节点标识和具体行为指令的对应关系;

当监听到所述条件节点、所述顺序节点或所述选择节点发生节点双击事件时,向被双击节点位置弹出节点属性修改面板,当接收到通过所述节点属性修改面板发送的节点属性时,所述事件监听器保存节点标识和节点属性的对应关系;

2)当监听到所述删除节点按钮发生按钮点击事件时,所述事件监听器将被点击区域对应的节点删除;

3)当监听到所述上移当前节点按钮发生按钮点击事件时,所述事件监听器将被点击的当前按钮的子节点依次向上移动一位;

4)当监听到所述下移当前节点按钮发生按钮点击事件时,所述事件监听器 将被点击的当前按钮的子节点依次向下移动一位。

(二)行为树预览模块

为方便理解行为树预览模块的执行原理,首先对本发明提供的行为树相关知识进行介绍:

行为树节点包括四类,顺序节点、选择节点、条件节点和行为节点。顺序节点、选择节点和条件节点可统称为组合节点或控制节点。

其中,顺序节点执行本节点时,迭代执行自己的子节点,只要遇到一个子节点执行后返回执行失败False的消息,则停止迭代,并向自己的父节点也返回执行失败False的消息;否则,只有当所有子节点均返回执行成功True的消息时,本节点才向自己的父节点返回True。相当于逻辑与运算。

选择节点执行本节点时,迭代执行自己所有的子节点。如遇到一个子节点执行后返回True,则停止迭代,并向自己的父节点也返回True;否则,只有所有的子节点均返回False,本节点才向自己的父节点返回False。相当于逻辑或运算。

整棵行为树中,只有行为节点才能成为叶子节点,而也只有子节点才是需要特别定制的节点,程序实现上需要根据逻辑编写具体实现的子类继承之;组合节点不能作为叶子节点,主要作用是用于控制行为树中的决策走向。

任何节点被执行后,必须向其父节点报告执行结果,执行成功(True)或执行失败(False)。这简单的成功失败汇报原则被很巧妙地用于控制整棵树的决策方向。

为了程序方便控制行为树每一次决策的走向流程,规定所有节点具有4个状态。分别是初始状态Init(即本次的行为树迭代一开始时所有节点的状态),正在执行的悬挂状态Pending(即该节点或者其中某一个子节点正在被执行且没有执行完毕),执行成功状态Finish,执行失败状态Fail。只要有一个子节点是Pending状态,包括所有孙子节点,那么该节点就一定是Pending状态。子节点执行成功和失败后需要向父节点返回结果。

上述过程中,子节点并非局限于某个节点的儿子节点,也包括孙子节点等,是某个节点的所有后代节点。

基于上述设计原则,行为树预览模块具体执行过程为:

顺序节点、选择节点和条件节点可统称为组合节点或控制节点,是一类具有子节点的一种节点,而行为节点属于叶子节点,是没有子节点的一种节点。

所述行为树预览模块用于将所述行为树编辑模块编辑得到的行为树输入到预存储游戏场景中的某个游戏角色中,通过所述行为树控制所述游戏角色的动作,并播放所述行为树对所述游戏角色的控制过程,实现对编辑得到的行为树运行过程的预览;

行为树预览模块对所述行为树的运行过程进行预览,具体包括以下步骤:

S1,所述行为树预览模块设置行为树中的节点具有4个状态,分别为初始状态、悬挂状态、执行成功状态和执行失败状态;

其中,所述初始状态是指:在最初第一次执行根节点之前,行为树中所有节点均为初始状态;

所述悬挂状态是指:当某个节点正在被执行时,或者,当某个节点的任意一个子节点正在被执行且没有执行完毕时,该节点即为悬挂状态的节点;

S2,设需执行的行为树共有n层,按自上而下顺序,依次记为:第1层、第2层…第n层;其中,n为自然数;第1层即为根节点;第n层即为叶子节点,所述叶子节点均为行为节点;所述非叶节点,即:第1层节点到第n-1层节点,均为控制节点;

S3,每隔预设时间间隔,即执行一次根节点,执行方法如图2所示,包括以下步骤:

S3.1,在当前时刻,所述行为树预览模块执行第1层节点,即:读取所述第1层节点的状态,判断所述第1层节点当前是否为悬挂状态,如果是,则执行S3.2-S3.5;如果否,则执行S3.6;

S3.2,所述行为树预览模块读取各个所述第2层节点,查找到当前为悬挂状态的第2层节点,记为:节点2.x;其中,当所述第1层节点为悬挂状态时,其儿子节点中有且仅有一个节点为悬挂状态;

S3.3,所述行为树预览模块执行节点2.x的悬挂函数,同时判断所述节点2.x是否为叶子节点,如果否,则执行S3.4;否则,直接执行S3.5;

S3.4,所述行为树预览模块继续递归执行节点2.x的子孙节点的悬挂函数, 直到执行到叶子节点,然后执行S3.5;其中,整根行为树有且仅有一条分支的各节点处于悬挂状态;

S3.5,所述行为树预览模块执行叶子节点的悬挂函数;所述叶子节点的悬挂函数直接导致游戏对象的行为发生变化;

S3.6,当所述第1层节点不为悬挂状态时,所述行为树预览模块根据第1层节点的类型,遍历执行各个第2层节点,

如果某个第2层节点为行为节点,则直接执行该行为节点,并将执行结果返回给所述第1层节点;所述第1层节点根据所接收到的执行结果,改变自身状态;

如果某个第2层节点为选择节点,则该选择节点迭代执行该选择节点的各个子节点,如果某个子节点执行后返回执行失败的通知消息,则继续迭代执行其他子节点;只要存在一个子节点执行后返回执行成功的通知消息,即停止迭代,该选择节点向自身的父节点返回执行成功的通知消息,然后,所述父节点将自身状态设置为执行成功状态;否则,如果所有子节点执行后均返回执行失败的通知消息,则:所述父节点将自身状态设置为执行失败状态;

如果某个第2层节点为顺序节点,则该顺序节点迭代执行该顺序节点的各个子节点,只有存在一个子节点执行后返回执行失败的通知消息,即停止迭代,该顺序节点向自身的父节点返回执行失败的通知消息,并且,所述父节点将自身状态设置为执行失败状态;否则,只有当所有子节点执行后均返回执行成功的通知消息后,该顺序节点才向自身的父节点返回执行成功的通知消息,然后,所述父节点将自身状态设置为执行成功状态。

本发明中,每隔设定时间,例如10帧左右,即执行一次根节点,不断对某个游戏角度的行为角色进行控制,根据迭代次数根据预览需求而定,从而实现对行为树执行效果的预览功能。

(三)行为树导出模块

所述行为树导出模块用于将预览成功的所述行为树以特定数据结构导出,供游戏运行时调用;

具体的,行为树编辑后,以合适的数据结构导出行为树。例如,使用Json数据格式导出行为树,在游戏运行时,读取导出的行为树文件,通过解析该文 件得到对应的行为树,然后将行为树赋给游戏对象,控制其相应的行为。

具体实现上,可以采用MiniJSON反序列化字符串和序列化Json,从而将json导出成字符串并存到文件中,并且可以从文件中的字符串解析成json,实现行为树导出或导入功能。

(四)行为树导入模块

所述行为树导入模块用于将已导出的所述行为树再次导入到所述行为树编辑模块,通过所述行为树编辑模块对所述行为树进行改进。当然,对于前一次尚未编辑完成的行为树,也可以通过行为树导入模块导入到行为树编辑模块,继续对该未编辑完成的行为树进行编辑操作。

本发明提供的行为树编辑器,是在EditorWindow的OnGUI函数中实现绘制界面功能的模块。包括绘制按钮区域、绘制行为树区域。绘制按钮区域提供导出按钮、导入按钮和预览按钮,按钮的绘制只需要调用GUILayout.Button即可实现。存储行为树的数据结构可以用C#的Queue,Queue的每一项是自定义的TreeNode类,TreeNode类的基本属性包括当前节点的孩子节点和深度。此外,还需要有行为树节点的点击处理回调,包括右键节点弹出添加删除节点小面板,双击节点弹出面板修改节点属性。编辑器编辑模块的核心功能是将用户在编辑器外构思出的树完整地在Unity3d中编辑出来,并且导出成所需的格式,并一键赋到游戏对象上,实现对编辑得到的行为树执行效果的预览,从而方便对编辑得到的行为树进行修改调试,从而全面提高了行为树编辑效率。

综上所述,本发明提供的基于U3D插件机制实现的行为树编辑器,具有以下优点:可以在U3D中直接设计AI行为树,而不需要预先编辑各个树节点,从而简化了行为树编辑过程;此外,该行为树编辑器提供行为树预览功能,能够方便快速的对编辑得到的行为树效果进行预览,方便对编辑得到的行为树进行修改调试,从而全面提高了行为树编辑效率。

以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视本发明的保护范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1