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

文档序号:11828833阅读:来源:国知局

技术特征:

1.一种基于U3D插件机制实现的行为树编辑器,其特征在于,包括行为树编辑模块、行为树预览模块、行为树导出模块和行为树导入模块;

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

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

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

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

2.根据权利要求1所述的基于U3D插件机制实现的行为树编辑器,其特征在于,所述行为树编辑模块包括行为树编辑面板以及事件监听器;

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

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

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

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

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

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

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

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

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

3.根据权利要求1所述的基于U3D插件机制实现的行为树编辑器,其特征在于,所述行为树预览模块对所述行为树的运行过程进行预览,具体包括以下步骤:

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

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