CN109189504B - 行为执行方法、行为树生成方法、装置和计算机设备 - Google Patents

行为执行方法、行为树生成方法、装置和计算机设备 Download PDF

Info

Publication number
CN109189504B
CN109189504B CN201811099417.2A CN201811099417A CN109189504B CN 109189504 B CN109189504 B CN 109189504B CN 201811099417 A CN201811099417 A CN 201811099417A CN 109189504 B CN109189504 B CN 109189504B
Authority
CN
China
Prior art keywords
behavior
node
attribute
condition
nodes
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201811099417.2A
Other languages
English (en)
Other versions
CN109189504A (zh
Inventor
陈明建
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN201811099417.2A priority Critical patent/CN109189504B/zh
Publication of CN109189504A publication Critical patent/CN109189504A/zh
Application granted granted Critical
Publication of CN109189504B publication Critical patent/CN109189504B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44505Configuring for program initiating, e.g. using registry, configuration files

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请涉及一种行为执行方法、行为树生成方法、装置和计算机设备,所述行为执行方法包括:搜索行为树中的控制节点;在搜索到的控制节点为配置有选择属性的节点时,选取与所述选择属性匹配的行为节点;获取所述行为节点中的条件属性;当根据所述条件属性确定所述行为节点对应的行为满足执行条件时,则执行所述行为节点对应的行为。本申请提供的方案可以提高人工智能行为的实现效率。

Description

行为执行方法、行为树生成方法、装置和计算机设备
技术领域
本申请涉及人工智能技术领域,特别是涉及一种行为执行方法、行为树生成方法、装置和计算机设备。
背景技术
随着人工智能技术的不断发展,越来越多的应用领域需要应用人工智能行为,以便为人类提供相应的人工智能服务。例如,人机交互类的应用中非玩家角色具备与玩家角色进行博弈的人工智能行为。
为了便于实现人工智能行为,出现了图形化的行为树编辑器,利用行为树编辑器提供的不同类型的节点搭建行为树,根据搭建的行为树来执行相应的行为。然而,行为树中的前置条件以节点方式配置,导致行为树中条件节点过多影响节点性能,使得人工智能行为的实现效率低。
发明内容
基于此,有必要针对人工智能行为的实现效率低的技术问题,提供一种行为执行方法、行为树生成方法、装置和计算机设备。
一种行为执行方法,包括:
搜索行为树中的控制节点;
在搜索到的控制节点为配置有选择属性的节点时,选取与所述选择属性匹配的行为节点;
获取所述行为节点中的条件属性;
当根据所述条件属性确定所述行为节点对应的行为满足执行条件时,则
执行所述行为节点对应的行为。
一种行为执行装置,包括:
控制节点搜索模块,用于搜索行为树中的控制节点;
行为节点选取模块,用于在搜索到的控制节点为配置有选择属性的节点时,选取与所述选择属性匹配的行为节点;
条件属性获取模块,用于获取所述行为节点中的条件属性;
执行模块,用于当根据所述条件属性确定所述行为节点对应的行为满足执行条件时,则执行所述行为节点对应的行为。
一种存储介质,存储有计算机程序,所述计算机程序被处理器执行时,使得所述处理器执行上述行为执行方法的步骤。
一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行上述行为执行方法的步骤。
上述的行为执行方法、装置、存储介质和计算机设备,搜索到配置有选择属性的控制节点,便可以有针对性的选取与选择属性匹配的行为节点。行为节点中配置有条件属性,无需利用条件节点来判断是否执行行为节点对应的行为,可以直接根据配置的条件属性来判断是否执行行为节点对应的行为,从而避免在行为树中使用条件节点,降低了行为树中的节点数量,提高了行为树的运行效率,进而提高人工智能行为的实现效率。
一种行为树生成方法,包括:
获取行为树模型中定义的选择节点;
在所述选择节点中配置选择属性;
选取所述行为树模型中定义的行为节点;
为所述行为节点配置条件属性;所述条件属性用于在执行所述行为节点对应的行为之前判断所述行为是否满足执行条件;
基于配置后的选择节点和配置后的行为节点生成行为树;配置的所述选择属性用于在运行所述行为树时选择与所述选择属性匹配的行为节点。
一种行为树生成装置,包括:
选择节点获取模块,用于获取行为树模型中定义的选择节点;
选择属性配置模块,用于在所述选择节点中配置选择属性;
行为节点选取模块,用于选取所述行为树模型中定义的行为节点;
条件属性配置模块,用于为所述行为节点配置条件属性;所述条件属性用于在执行所述行为节点对应的行为之前判断所述行为是否满足执行条件;
行为树生成模块,用于基于配置后的选择节点和配置后的行为节点生成行为树;配置的所述选择属性用于在运行所述行为树时选择与所述选择属性匹配的行为节点。
一种存储介质,存储有计算机程序,所述计算机程序被处理器执行时,使得所述处理器执行上述行为树生成方法的步骤。
一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行上述行为树生成方法的步骤。
上述的行为树生成方法、装置、存储介质和计算机设备,获取行为树模型中定义的选择节点,在选择节点中配置选择属性,便可以有针对性的选取与选择属性匹配的行为节点。选取行为树模型中定义的行为节点,为行为节点配置条件属性,以便于在执行行为树中的相应行为时无需利用条件节点来判断是否执行行为节点对应的行为,可以直接根据配置的条件属性来判断是否执行行为节点对应的行为,从而避免在行为树中使用条件节点,降低了行为树中的节点数量,提高了行为树的运行效率,进而提高人工智能行为的实现效率。
一种行为树生成方法,包括:
获取待生成行为树的配置文件;所述配置文件中包含有与所述待生成行为树的选择节点对应的选择属性代码,以及包含有与所述待生成行为树的行为节点对应条件属性代码;
根据获取的配置文件生成行为树;所述行为树的选择节点配置有由所述选择属性代码生成的选择属性,所述选择属性用于在运行所述行为树时选择与所述选择属性匹配的行为节点;所述行为树的行为节点配置有由所述条件属性代码条件属性,所述条件属性用于在执行所述行为节点对应的行为之前判断所述行为是否满足执行条件。
一种行为树生成装置,包括:
配置文件获取模块,用于获取待生成行为树的配置文件;所述配置文件中包含有与所述待生成行为树的选择节点对应的选择属性代码,以及包含有与所述待生成行为树的行为节点对应条件属性代码;
行为树生成模块,用于根据获取的配置文件生成行为树;所述行为树的选择节点配置有由所述选择属性代码生成的选择属性,所述选择属性用于在运行所述行为树时选择与所述选择属性匹配的行为节点;所述行为树的行为节点配置有由所述条件属性代码条件属性,所述条件属性用于在执行所述行为节点对应的行为之前判断所述行为是否满足执行条件。
一种存储介质,存储有计算机程序,所述计算机程序被处理器执行时,使得所述处理器执行上述行为树生成方法的步骤。
一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行上述行为树生成方法的步骤。
上述的行为树生成方法、装置、存储介质和计算机设备,在待生成行为树的配置文件中包含有选择节点对应的选择属性代码,在生成相应的行为树时,选择节点中便可配置有选择属性,从而可以有针对性的选取与选择属性匹配的行为节点。此外,行为节点对应条件属性代码,在生成相应的行为树时,便可在行为节点配置有条件属性,从而在执行行为树中的相应行为时无需利用条件节点来判断是否执行行为节点对应的行为,可以直接根据配置的条件属性来判断是否执行行为节点对应的行为,从而避免在行为树中使用条件节点,降低了行为树中的节点数量,提高了行为树的运行效率,进而提高人工智能行为的实现效率。
附图说明
图1为一个实施例中行为执行方法的流程示意图;
图2为一个实施例中行为树的树形结构示意图;
图3为一个实施例中配置有选择属性的行为树的树形结构示意图;
图4为一个实施例中配置有条件属性的行为树的树形结构示意图;
图5为一个实施例中获取配置有选择属性的行为节点的步骤的流程示意图;
图6为一个实施例中根据执行行为节点反馈相应返回码步骤的流程示意图;
图7为一个实施例中根据行为树对应的计算机操作指令执行对应行为节点对应行为的步骤的流程示意图;
图8为一个实施例中生成对应计算机代码所引用的类之间的关系示意图;
图9为一个实施例中生成行为树的步骤的流程示意图;
图10为一个实施例中生成的行为树的树形结构示意图;
图11为另一个实施例中生成行为树的步骤的流程示意图;
图12为一个实施例中配置文件中的配置信息示意图;
图13为一个实施例中生成行为树的流程示意图;
图14为另一个实施例中生成行为树的流程示意图;
图15为一个实施例中行为执行装置的结构框图;
图16为另一个实施例中行为执行装置的结构框图;
图17为一个实施例中行为树生成装置的结构框图;
图18为另一个实施例中行为树生成装置的结构框图;
图19为另一个实施例中行为树生成装置的结构框图;
图20为一个实施例中计算机设备的结构框图;
图21为另一个实施例中计算机设备的结构框图;
图22为另一个实施例中计算机设备的结构框图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
如图1所示,在一个实施例中,提供了一种行为执行方法,该行为执行方法应用于终端。该终端具体可以包括台式电脑、笔记本电脑、平板电脑、智能手机以及掌上电脑等。参考图1,该行为执行方法具体包括如下步骤:
S102,搜索行为树中的控制节点。
其中,行为树是一种包含控制节点(也可称为逻辑节点)和行为节点的树结构,每次需要找出一个行为时,会从行为树的根节点出发遍历各个节点,找出一个与当前数据相符合的行为。每一棵行为树表示一个AI(Artificial Intelligence,人工智能)逻辑,在执行AI逻辑时需从根节点开始遍历执行整个行为树,遍历执行的过程中,根据所遍历节点的类型选择需要执行的子行为节点并进行执行,执行完子行为节点对应的行为后将执行结果返回给其父节点。
行为树中节点可以包括控制节点和行为节点这两种类型的节点,如图2所示,图中实线圆圈表示控制节点,虚线圆圈表示行为节点。其中,行为节点是也可称为动作节点,是行为树中用于实现具体行为的节点。例如,对于某个游戏来说,通过执行行为树中相应的行为节点,可以实现游戏角色的巡逻(Patrol)、攻击(Attack)和逃跑(Retreat)等行为。控制节点除了行为节点之外,还可以包括:组合节点和装饰节点。其中,组合节点包括:选择(Selector)节点、序列(Sequence)节点和平行(Parallel)节点。选择节点的执行规则是选择其子节点中的其中一个节点进行执行。序列节点的执行规则是将其所有子节点依次执行,也就是说当前一个返回完成状态后,再运行下一个子节点。平行节点的执行规则是将其所有子节点都运行一遍。因此,当搜索行为树中的某个行为,可以通过控制节点定义的逻辑进行选择。
在一个实施例中,终端获取当前与行为树对应的交互场景的数据,基于获取的当前数据对行为树进行搜索,以搜索到与当前数据相匹配的控制节点,进而查找到与当前数据对应的行为节点。
例如,对于一个游戏场景,若在5米范围内出现了敌方人员,此时获取到敌方人员的数据,根据该数据搜索对应的控制节点,以查找到与该数据匹配的行为节点,进而执行相应的行为(如攻击或防御)。
在一个实施例中,终端从行为树的根节点从上往下开始进行搜索,以搜索到行为树中的控制节点。
在一个实施例中,终端还可以从行为树中上一次执行的节点开始搜索,从而搜索到行为树中的控制节点。具体的,终端记录每一次所执行的控制节点的节点标识,当下一次需要执行与当前数据相匹配的行为时,根据上一次记录的节点标识查找到对应的控制节点。
S104,在搜索到的控制节点为配置有选择属性的节点时,选取与选择属性匹配的行为节点。
其中,控制节点中配置有选择属性的节点可称为选择节点,该选择节点中配置了选择属性。选择属性可以包括标识符名称(token_name)和标识符值(token_value)这两种属性,标识符名称可用于区分均配置有选择属性的不同选择节点,标识符值可用于根据该标识符值选取匹配的行为节点。行为节点可以是用于表示各种具体行为的节点。
在一个实施例中,配置有选择属性的选择节点,其子节点均有标识符值。终端在搜索到配置有选择属性的选择节点时,根据选择属性中的标识符值选择对应的行为节点。
如图3所示,当搜索到标识符选择(select_by_token)节点时,终端根据节点中配置的token_value选取标识符值为sel-action3的行为节点,即选取action3节点。
在一个实施例中,该方法还可以包括:在搜索到的控制节点为未配置选择属性的节点时,则随机搜索控制节点的子节点;或者,按照优先级从大到小的顺序依次搜索控制节点的子节点;当搜索到的子节点为行为节点时,执行获取行为节点中的条件属性的步骤。
对于选择节点而言,除了可以按照配置的选择属性选取对应的子节点,还可以根据优先级顺序和随机的方式。终端在搜索到未配置选择属性的选择节点时,根据该选择节点的类型确定选择子节点的方式,当确定为随机方式时,则随机选择对应的子节点。当确定为按照优先级方式时,终端按照优先级从大到小的顺序依次搜索控制节点的子节点。
例如,如图3所示,当搜索到的是优先级选择(select_priority)节点时,由于该选择节点为按照优先级的方式进行选择的节点,因此,终端会优先选取select_by_token节点,然后根据select_by_token节点中的token_value选择对应的行为节点。当搜索到的是随机选择(select_random)节点时,由于该节点为按照随机方式进行选择的选择节点,此时终端会按照随机的方式选择action4-action6中的任一节点。其中,select_priority节点所连接的四个实线箭头线,其优先级从左到右逐次递减。
S106,获取行为节点中的条件属性。
其中,条件属性可以包括前置条件属性、打断条件属性和循环打断属性。前置条件属性用于在执行行为节点对应的行为时,判断该行为节点对应的行为是否符合当前数据,若是,则执行行为节点对应的行为,若否,则不执行。打断条件属性用于在打断正在执行的行为节点对应的行为之前,判断当前数据是否符合打断条件属性中的打断条件,若是,则打断正在执行的行为节点对应的行为,若否,则不打断。循环打断属性用于在打断循环执行的行为节点对应的行为之前,判断当前数据是否符合循环打断属性中的打断条件,若是,则打断正在循环执行的行为节点对应的行为,若否,则不打断。
在一个实施例中,行为树中序列节点、选择节点、平行节点和循环节点及其子行为节点均可配置前置条件属性。其中,前置条件属性可以使用前置条件(pre_cond)配置单个行为节点,也可以使用另一种前置条件(pre_cond_node)配置节点组合,如为序列节点、选择节点、平行节点和循环节点配置前置条件,以实现较复杂的判断逻辑。其中,前置条件属性例如可以是敌方人员距离己方是否小于5米,敌方人员的攻击能力是否大于己方的攻击能力等等。
如图4所示,图4(a)为未配置前置条件的行为树,图4(b)为配置前置条件的行为树。其中,图4(a)的虚线框部分节点有一个选择节点、一个条件节点和一个行为节点,为行为节点配置前置条件属性后,便可去除选择节点和条件节点,如图4(b)所示,从而减少了节点数量。
需要说明的是,条件节点可用于在执行对应行为之前进行前置条件判断,当去除条件节点,并将对应的前置条件属性配置于行为节点时,可以使栈的深度变浅,提高行为树的运行效率。
在一个实施例中,终端为行为节点配置了打断条件属性,用于在行为节点返回Running时,执行打断操作。打断条件属性可以用break_cond配置成单个action,也可以使用break_cond_node配置成节点组合,以实现较复杂的判断逻辑。
如图4(b)中的pre_check节点即为通过pre_cond_node属性配置的节点组合,从而实现较复杂的前置条件判断。需要说明的是,图4(b)中,从行为树的图形显示来说,pre_cond和pre_cond_node在图形上都显示为pre_cond,由于pre_cond配置的是一个action节点,直接显示在节点的属性框内。pre_cond_node配置的是一颗子树,使用虚线箭头线来标示。
S108,当根据条件属性确定行为节点对应的行为满足执行条件时,则执行行为节点对应的行为。
在一个实施例中,终端获取当前与运行的行为树对应的数据,基于获取的当前数据,根据条件属性确定行为节点对应的行为是否满足执行条件,若满足,则执行行为节点对应的行为。若不满足,则不执行行为节点对应的行为,重新进行节点搜索,如返回执行S102的步骤。
例如,对于一个游戏场景,若出现了敌方人员,此时获取到敌方人员的攻击能力、防御能力、生命值、距离,以及己方的攻击能力、防御能力、生命值等数据。若敌方人员距离小于5米,敌方人员的攻击能力和生命值分别小于己方的攻击能力和生命值,则确定满足攻击条件。若敌方人员距离小于5米,敌方人员的攻击能力和生命值分别大于己方的攻击能力和生命值,则确定满足撤退条件。若敌方人员距离大于5米,无论敌方人员的攻击能力和生命值分别大于或是小于己方的攻击能力和生命值,则确定满足防御条件。
在一个实施例中,当根据条件属性确定行为节点对应的行为不满足执行条件时,终端搜索行为树中的控制节点。在搜索到的控制节点为未配置有选择属性的节点时,则随机搜索控制节点的子节点;或者,按照优先级从大到小的顺序依次搜索控制节点的子节点。当搜索到的子节点为行为节点时,获取行为节点中的条件属性,当根据条件属性确定行为节点对应的行为满足执行条件时,则执行行为节点对应的行为。
上述实施例中,搜索到配置有选择属性的控制节点,便可以有针对性的选取与选择属性匹配的行为节点。行为节点中配置有条件属性,无需利用条件节点来判断是否执行行为节点对应的行为,可以直接根据配置的条件属性来判断是否执行行为节点对应的行为,从而避免在行为树中使用条件节点,降低了行为树中的节点数量,提高了行为树的运行效率,进而提高人工智能行为的实现效率。
在一个实施例中,如图5所示,S104具体可以包括:
S502,确定控制节点的节点类型。
其中,节点类型可以包括选择节点类型、序列节点类型、并列节点类型和装饰节点类型。选择节点类型又可以分为优先选择类型、随机选择类型和配置有条件属性的节点类型。
在一个实施例中,终端获取行为树中的控制节点,判断出控制节点的节点类型。终端根据节点类型确定该控制节点是否为配置有选择属性的节点,若是,则执行S504。若否,则随机搜索控制节点的子节点;或者,按照优先级从大到小的顺序依次搜索控制节点的子节点。
S504,在根据节点类型确定控制节点为配置有选择属性的节点时,则按照选择属性选取控制节点的子节点。
在一个实施例中,配置有选择属性的选择节点,其子节点均有标识符值。终端在搜索到配置有选择属性的选择节点时,根据选择属性中的标识符值选择对应的行为节点。
如图3所示,当搜索到select_by_token节点时,终端根据节点中配置的token_value选取标识符值为sel-action3的行为节点,即选取action3节点。
S506,当子节点为叶子节点时,将子节点确定为与选择属性匹配的行为节点。
上述实施例中,确定搜索到的控制节点的节点类型,在根据节点类型确定控制节点为配置有选择属性的节点时,便可根据选择属性选取控制节点的子节点,有针对性的选取行为节点。
在一个实施例中,如图6所示,该方法还可以包括:
S602,生成与执行行为节点对应的行为后所得的结果相匹配的返回码。
其中,在行为树模型中,除了通用行为树模型中定义的返回码类型外,还新增了BHT_SKIP返回码,该BHT_SKIP返回码使用在配置有前置条件属性、打断条件属性和循环打断属性的节点中。
具体地,终端在执行行为节点对应的行为后,由行为节点中配置的前置条件属性、或打断条件属性、或循环打断属性返回执行结果。当前置条件属性返回Fail、打断条件属性和循环打断属性返回Success时,对应的宿主节点(如配置条件属性的行为节点)生成BHT_SKIP返回码,并执行S604。需要说明的是,这里的前置条件属性、打断条件属性和循环打断属性可理解为行为节点中的一个节点,可以返回Success、Fail和Running返回码。
在一个实施例中,终端在执行行为节点对应的行为后,获取与执行行为节点对应的行为的结果对应的BHT_SKIP返回码。
S604,将返回码反馈至行为节点的父节点。
具体地,终端将BHT_SKIP返回码从行为节点反馈至行为节点的父节点。
S606,根据父节点的节点类型确定与返回码匹配的目标返回码。
BHT_SKIP返回码的含义随着对应宿主节点的父节点的类型不同而发生变化。
例如,若父节点是序列节点时,则BHT_SKIP返回码相当于BHT_SUCCESS。若父节点是选择节点,则BHT_SKIP返回码相当于BHT_FAIL。
S608,将目标返回码反馈至父节点的上一级节点;反馈的目标返回码,用于指示上一级节点根据上一级节点的节点类型执行与目标返回码对应的操作。
在一个实施例中,终端通过宿主节点将BHT_SKIP返回码反馈至其父节点,若父节点是序列节点时,则BHT_SKIP返回码相当于BHT_SUCCESS,表示行为节点对应的行为执行完成,将BHT_SUCCESS反馈至父节点的上一级节点。若父节点是选择节点,则BHT_SKIP返回码相当于BHT_FAIL,表示行为节点对应的行为未执行完成,终端将BHT_FAIL反馈至父节点的上一级节点。例如游戏角色是否执行开宝箱的操作,若不执行,则反馈的BHT_SKIP返回码可以表示不执行开宝箱的操作,也即BHT_FAIL就可以表示不执行开宝箱的操作。若父节点是平行节点,则BHT_SKIP返回码将被忽略,继续执行挂载至父节点的其它子节点。若父节点只有唯一的子节点时,将继续向上一级节点反馈BHT_SKIP返回码。若父节点为装饰节点,将继续向上一级节点反馈BHT_SKIP返回码。
上述实施例中,执行完行为节点对应的行为后,生成与结果相匹配的BHT_SKIP返回码,该BHT_SKIP返回码随着父节点的节点类型不同,其含义也发生相应的变化,一方面,既确保能够反馈正确的用于表示执行结果的BHT_SKIP返回码,根据该返回码执行后续的行为。另一方面,提高了返回码的多样性表示,有利于提高代码的编写效率。
在一个实施例中,如图7所示,该方法还可以包括:
S702,确定行为树中各节点的节点类型。
其中,节点类型可以包括选择节点类型、序列节点类型、并列节点类型和装饰节点类型。选择节点类型又可以分为优先选择类型、随机选择类型和配置有条件属性的节点类型。
S704,获取与节点类型对应的函数接口类。
其中,不同的节点类型可以对应有不同的函数接口类。类是面向对象的编程语言中的概念,通过引用对应的类,可以调用该对应类的实例方法。
在一个实施例中,终端根据行为树生成对应的计算机程序,根据生成的计算机程序获取与节点类型对应的函数接口类。
在一个实施例中,终端根据行为树自动生成的C++代码主要继承自ibht类,并且在生成的行为树实例类中使用了ibht_context和ibht_rule的组合方式来搭建行为树的框架,在行为树的初始化过程中使用ibht_node类来创建各个具体节点,如图8所示。这些过程已经都隐含在自动生成的代码中,对使用者来说,只需要关注行为树的函数接口类提供的接口即可。需要说明的是,终端根据行为树还可自动生成python、或C#、或C语言代码。
类层次结构如下:ibht是一个纯虚类,定义了行为树对外提供服务的所有函数接口。ibht_node定义了行为树中节点需要暴露的函数接口,该ibht_node接口主要给自动生成的行为树框架使用。ibht_rule:主要定义了行为树的运行函数接口。ibht_context相对比较复杂,主要用于维护行为树的运行状态,并负责行为树中子行为树的context创建,selector节点的token维护,running节点的状态维护,日志方式维护,以及用户数据userdata的存储等。ibht_context是行为树内部使用的类,外部使用者可以通过ibht接口来获取部分信息。
S706,按照各节点之间的关系调用函数接口类中定义的函数接口。
其中,这里的函数接口可以是用于实现行为树中各节点对应的操作,例如用于维护行为树的运行状态的函数接口。用于负责行为树中子树的内容(context)创建。用于对选择节点的条件属性(token)的维护以及日志方式维护的函数接口等等。
S708,获取输入的与行为树中行为节点对应的行为操作函数和函数输入量。
其中,行为操作函数可以指用于实现行为节点对应的行为所采用的函数方法。函数输入量可以指用于输入到行为操作函数中的量。
在一个实施例中,终端创建行为对象,将行为对象所赋的值直接作为函数输入量。在一个实施例中,终端可将行为对象所赋的值进行运算后作为函数输入量。例如,己方游戏角色在A区域,若想让游戏角色移动至B区域,则终端可创建一个移动对象,将B区域的坐标赋值于该移动对象以作为行为操作函数的输入量,从而游戏角色获得B区域的坐标。
S710,根据函数接口、行为操作函数和函数输入量生成操作指令;操作指令用于执行行为树中行为节点对应的行为。
在一个实施例中,终端可直接根据函数接口、行为操作函数和函数输入量进行编译,得到用于执行行为树中行为节点对应行为的计算机操作指令,通过该计算机操作指令来实现行为树中行为节点对应的行为。
上述实施例中,通过行为树可生成对应的计算机程序,按照各节点之间的关系调用函数接口类中定义的函数接口,获取输入的与行为树中行为节点对应的行为操作函数和函数输入量;根据函数接口、行为操作函数和函数输入量生成操作指令;操作指令用于执行行为树中行为节点对应的行为,从而完成了相应的行为操作。由于可以根据行为树生成对应的计算机程序,减少了代码开发的工作量,同时让开发人员从代码细节中摆脱出来,可以更专注于玩法的设计。
在一个实施例中,如图9所示,该方法还可以包括:
S902,获取行为树模型中定义的选择节点。
其中,选择节点为控制节点中的一种节点。
对于行为树的创建,可以通过图形化的编辑器创建行为树。在该图形化的编辑器中,对应的行为树模型中定义了各种类型的节点,包括选择节点、序列节点、平行节点、装饰节点和行为节点等等。当创建行为树时,可以在编辑器选取行为树模型中定义的各种节点。
对于行为树模型中定义的各种节点,其属性配置方式可以分为以下两种:
方式1,创建行为树之前,行为树模型中定义了的节点已配置相应属性。
在一个实施例中,节点中的属性可以预先进行配置,即预先配置相应属性的节点,然后保存于行为树模型对应的节点库中。当创建行为树时,终端直接在编辑器的菜单栏中选取配置有对应属性的节点进行行为树的创建。
方式2,在创建行为树时进行属性配置。
详细的配置方法可参考S904。
S904,在选择节点中配置选择属性。
选择属性可以包括标识符名称和标识符值,标识符名称可用于区分均配置有选择属性的不同选择节点,标识符值可用于根据该标识符值选取匹配的行为节点。
在一个实施例中,终端接收输入配置指令,根据输入的配置指令在选择节点中配置选择属性。其中,配置有选择属性的选择节点,其子节点均有标识符值。终端在搜索到配置有选择属性的选择节点时,根据选择属性中的标识符值选择对应的行为节点。
如图3所示,虚线框的节点为配置有选择属性的选择节点(select_by_token)。在运行图3中的行为树时,若搜索到select_by_token节点,终端根据节点中配置的token_value选取标识符值为sel-action3的行为节点,即选取action3节点。
在一个实施例中,对于未配置选择属性的选择节点,在运行行为树时,则随机搜索控制节点的子节点;或者,按照优先级从大到小的顺序依次搜索控制节点的子节点;当搜索到的子节点为行为节点时,则获取行为节点中的条件属性,当根据条件属性确定行为节点对应的行为满足执行条件时,则执行行为节点对应的行为。
例如,如图3所示,对于未配置选择属性的select_priority节点。当搜索到的是select_priority节点时,由于该节点为按照优先级的方式进行选择的优先选择节点,因此,终端会优先选取select_by_token节点,然后根据select_by_token节点中的token_value选择对应的行为节点。当搜索到的是select_random节点时,由于该节点为按照随机方式进行选择的选择节点,此时终端会按照随机的方式选择action4-action6中的任一节点。其中,select_priority节点连接的四个实线箭头线,其优先级从左到右逐次递减。
在一个实施例中,终端还可以在选择节点中配置条件属性。如图10中的ExecuteSwitchWeapon节点。
S906,选取行为树模型中定义的行为节点。
其中,行为节点可以是用于表示各种具体行为的节点。例如,行为节点对应的行为可以包括游戏角色的巡逻、攻击和逃跑等行为。
S908,为行为节点配置条件属性;条件属性用于在执行行为节点对应的行为之前判断行为是否满足执行条件。
其中,条件属性可以包括前置条件属性、打断条件属性和循环打断属性。前置条件属性用于在执行行为节点对应的行为时,判断该行为节点对应的行为是否符合当前数据,若是,则执行行为节点对应的行为,若否,则不执行。打断条件属性用于在打断正在执行的行为节点对应的行为之前,判断当前数据是否符合打断条件属性中的打断条件,若是,则打断正在执行的行为节点对应的行为,若否,则不打断。循环打断属性用于在打断循环执行的行为节点对应的行为之前,判断当前数据是否符合循环打断属性中的打断条件,若是,则打断正在循环执行的行为节点对应的行为,若否,则不打断。
在一个实施例中,该方法还可以包括:获取与行为树模型定义的条件节点对应的前置条件属性和打断条件属性;删除行为树模型中定义的条件节点;S908具体可以包括:为行为节点配置前置条件属性;前置条件属性用于在满足运行条件时执行行为节点对应的行为;或者,为行为节点配置打断条件属性;打断条件属性用于在满足打断条件时中断行为节点对应的行为。
在一个实施例中,行为树中序列节点、选择节点、平行节点和循环节点及其子行为节点均可配置前置条件属性。其中,前置条件属性可以使用pre_cond配置单个行为节点,也可以使用pre_cond_node配置节点组合,如为序列节点、选择节点、平行节点和循环节点配置前置条件,以实现较复杂的判断逻辑。其中,前置条件属性例如可以是敌方人员距离己方是否小于5米,敌方人员的攻击能力是否大于己方的攻击能力等等。
如图4所示,图4(a)为未配置前置条件的行为树,图4(b)为配置前置条件的行为树。其中,图4(a)的虚线框部分节点有一个选择节点、一个条件节点和一个行为节点,为行为节点配置前置条件属性后,便可去除选择节点和条件节点,如图4(b)所示,从而减少了节点数量。
需要说明的是,条件节点可用于在执行对应行为之前进行前置条件判断,当去除条件节点,并将对应的前置条件属性配置于行为节点时,可以使栈的深度变浅,提高行为树的运行效率。
在一个实施例中,终端为行为节点配置了打断条件属性,用于在行为节点返回Running时,执行打断操作。打断条件属性可以用break_cond配置成单个action,也可以使用break_cond_node配置成节点组合,以实现较复杂的判断逻辑。
如图4(b)中的pre_check节点即为通过pre_cond_node属性配置的节点组合,从而实现较复杂的前置条件判断。需要说明的是,图4(b)中,从行为树的图形显示来说,pre_cond和pre_cond_node在图形上都显示为pre_cond,由于pre_cond是一个action节点,直接显示在节点的属性框内。pre_cond_node中配置的是一颗子树,使用虚线箭头线来标示。
S910,基于配置后的选择节点和配置后的行为节点生成行为树;配置的选择属性用于在运行行为树时选择与选择属性匹配的行为节点。
在一个实施例中,终端还选取除选择节点和行为节点之外的控制节点,如序列节点、平行节点和装饰节点。终端还可以为选择节点配置条件属性,根据选取的控制节点、配置后的选择节点和配置后的行为节点生成行为树。
例如,生成的行为树可参考图10,图中的ExecuteSwitchWeapon、ExecuteAttachTarget和ExecuteSDBomb等节点均配置有前置条件属性。
在一个实施例中,终端还获取行为树模型中定义的循环节点;为循环节点配置循环打断条件属性;循环打断条件属性用于打断当前循环执行的、与循环节点对应行为子节点的行为。
其中,循环节点为装饰节点中的一种节点。
上述实施例中,获取行为树模型中定义的选择节点,在选择节点中配置选择属性,便可以有针对性的选取与选择属性匹配的行为节点。选取行为树模型中定义的行为节点,为行为节点配置条件属性,以便于在执行行为树中的相应行为时无需利用条件节点来判断是否执行行为节点对应的行为,可以直接根据配置的条件属性来判断是否执行行为节点对应的行为,从而避免在行为树中使用条件节点,降低了行为树中的节点数量,提高了行为树的运行效率,进而提高人工智能行为的实现效率。
在一个实施例中,如图11所示,该方法还可以包括:
S1102,获取待生成行为树的配置文件;配置文件中包含有与待生成行为树的选择节点对应的选择属性代码,以及包含有与待生成行为树的行为节点对应条件属性代码。
其中,配置文件中定义了行为树节点的逻辑规则,当前行为树中使用到的外部子树的信息,以及生成源代码时所需的信息。行为树的配置文件主要由desc_info和tree两部分组成,如图12所示。
desc_info包含名字空间(namespace),类名(class_name),备注(remark),子行为树(sub_bhts),导入的行为节点类型(imported_action_classes)这些配置,namesapce和class_name分别指定行为树自动生成C++代码的名字空间和行为树类名。remark是行为树的描述信息,用于在生成行为树图形和编辑器中展示。sub_bhts配置了行为树中导入的外部行为树的信息,其中主要是指定外部行为树的包含路径include_dir和行为树名。imported_action_classes配置了行为树中所导入行为节点的信息,包括了行为节点所在的类文件全路径include_file和行为节点所在的类名。
tree部分定义了所有行为树节点的信息,tree的信息按照树形结构递归定义。每个tree节点包两个基本信息:节点的名称(name)和节点的类型(type),以及根据节点类型配置其它节点属性信息,如前置条件:pre_cond/pre_cond_node,打断条件break_cond/break_cond_node,循环次数times等。
S1104,根据获取的配置文件生成行为树;行为树的选择节点配置有由选择属性代码生成的选择属性,选择属性用于在运行行为树时选择与选择属性匹配的行为节点;行为树的行为节点配置有由条件属性代码条件属性,条件属性用于在执行行为节点对应的行为之前判断行为是否满足执行条件。
在一个实施例中,行为树的选择节点还可以配置有条件属性,如图10所示,图中的ExecuteSwitchWeapon、ExecuteAttachTarget和ExecuteSDBomb等节点均配置有前置条件属性。
上述的行为树生成方法、装置、存储介质和计算机设备,在待生成行为树的配置文件中包含有选择节点对应的选择属性代码,在生成相应的行为树时,选择节点中便可配置有选择属性,从而可以有针对性的选取与选择属性匹配的行为节点。此外,行为节点对应条件属性代码,在生成相应的行为树时,便可在行为节点配置有条件属性,从而在执行行为树中的相应行为时无需利用条件节点来判断是否执行行为节点对应的行为,可以直接根据配置的条件属性来判断是否执行行为节点对应的行为,从而避免在行为树中使用条件节点,降低了行为树中的节点数量,提高了行为树的运行效率,进而提高人工智能行为的实现效率。
如图13所示,在一个实施例中,提供了一种行为树生成方法,该行为树生成方法应用于终端。该终端具体可以包括台式电脑、笔记本电脑、平板电脑、智能手机以及掌上电脑等。参考图13,该行为树生成方法具体包括如下步骤:
S1302,获取行为树模型中定义的选择节点。
其中,选择节点为控制节点中的一种节点。
对于行为树的创建,可以通过图形化的编辑器创建行为树。在该图形化的编辑器中,对应的行为树模型中定义了各种类型的节点,包括选择节点、序列节点、平行节点、装饰节点和行为节点等等。当创建行为树时,可以在编辑器选取行为树模型中定义的各种节点。
对于行为树模型中定义的各种节点,其属性配置方式可以分为以下两种:
方式1,创建行为树之前,行为树模型中定义了的节点已配置相应属性。
在一个实施例中,节点中的属性可以预先进行配置,即预先配置相应属性的节点,然后保存于行为树模型对应的节点库中。当创建行为树时,终端直接在编辑器的菜单栏中选取配置有对应属性的节点进行行为树的创建。
方式2,在创建行为树时进行配置。
详细的配置方法可参考S1304。
S1304,在选择节点中配置选择属性。
选择属性可以包括标识符名称和标识符值,标识符名称可用于区分均配置有选择属性的不同选择节点,标识符值可用于根据该标识符值选取匹配的行为节点。
在一个实施例中,终端接收输入配置指令,根据输入的配置指令在选择节点中配置选择属性。其中,配置有选择属性的选择节点,其子节点均有标识符值。终端在搜索到配置有选择属性的选择节点时,根据选择属性中的标识符值选择对应的行为节点。
如图3所示,虚线框的节点为配置有选择属性的选择节点(select_by_token)。在运行图3中的行为树时,若搜索到select_by_token节点,终端根据节点中配置的token_value选取标识符值为sel-action3的行为节点,即选取action3节点。
在一个实施例中,对于未配置选择属性的选择节点,在运行行为树时,则随机搜索控制节点的子节点;或者,按照优先级从大到小的顺序依次搜索控制节点的子节点;当搜索到的子节点为行为节点时,则获取行为节点中的条件属性,当根据条件属性确定行为节点对应的行为满足执行条件时,则执行行为节点对应的行为。
例如,如图3所示,对于未配置选择属性的select_priority节点。当搜索到的是select_priority节点时,由于该节点为按照优先级的方式进行选择的优先选择节点,因此,终端会优先选取select_by_token节点,然后根据select_by_token节点中的token_value选择对应的行为节点。当搜索到的是select_random节点时,由于该节点为按照随机方式进行选择的选择节点,此时终端会按照随机的方式选择action4-action6中的任一节点。其中,select_priority节点连接的四个实线箭头线,其优先级从左到右逐次递减。
在一个实施例中,终端还可以在选择节点中配置条件属性。如图10中的ExecuteSwitchWeapon节点。
S1306,选取行为树模型中定义的行为节点。
其中,行为节点可以是用于表示各种具体行为的节点。例如,行为节点对应的行为可以包括游戏角色的巡逻、攻击和逃跑等行为。
S1308,为行为节点配置条件属性;条件属性用于在执行行为节点对应的行为之前判断行为是否满足执行条件。
其中,条件属性可以包括前置条件属性、打断条件属性和循环打断属性。前置条件属性用于在执行行为节点对应的行为时,判断该行为节点对应的行为是否符合当前数据,若是,则执行行为节点对应的行为,若否,则不执行。打断条件属性用于在打断正在执行的行为节点对应的行为之前,判断当前数据是否符合打断条件属性中的打断条件,若是,则打断正在执行的行为节点对应的行为,若否,则不打断。循环打断属性用于在打断循环执行的行为节点对应的行为之前,判断当前数据是否符合循环打断属性中的打断条件,若是,则打断正在循环执行的行为节点对应的行为,若否,则不打断。
在一个实施例中,该方法还可以包括:获取与行为树模型定义的条件节点对应的前置条件属性和打断条件属性;删除行为树模型中定义的条件节点;S1308具体可以包括:为行为节点配置前置条件属性;前置条件属性用于在满足运行条件时执行行为节点对应的行为;或者,为行为节点配置打断条件属性;打断条件属性用于在满足打断条件时中断行为节点对应的行为。
在一个实施例中,行为树中序列节点、选择节点、平行节点和循环节点及其子行为节点均可配置前置条件属性。其中,前置条件属性可以使用pre_cond配置单个行为节点,也可以使用pre_cond_node配置节点组合,如为序列节点、选择节点、平行节点和循环节点配置前置条件,以实现较复杂的判断逻辑。其中,前置条件属性例如可以是敌方人员距离己方是否小于5米,敌方人员的攻击能力是否大于己方的攻击能力等等。
如图4所示,图4(a)为未配置前置条件的行为树,图4(b)为配置前置条件的行为树。其中,图4(a)的虚线框部分节点有一个选择节点、一个条件节点和一个行为节点,为行为节点配置前置条件属性后,便可去除选择节点和条件节点,如图4(b)所示,从而减少了节点数量。
需要说明的是,条件节点可用于在执行对应行为之前进行前置条件判断,当去除条件节点,并将对应的前置条件属性配置于行为节点时,可以使栈的深度变浅,提高行为树的运行效率。
在一个实施例中,终端为行为节点配置了打断条件属性,用于在行为节点返回Running时,执行打断操作。打断条件属性可以用break_cond配置成单个action,也可以使用break_cond_node配置成节点组合,以实现较复杂的判断逻辑。
如图4(b)中的pre_check节点即为通过pre_cond_node属性配置的节点组合,从而实现较复杂的前置条件判断。需要说明的是,图4(b)中,从行为树的图形显示来说,pre_cond和pre_cond_node在图形上都显示为pre_cond,由于pre_cond是一个action节点,直接显示在节点的属性框内。pre_cond_node中配置的是一颗子树,使用虚线箭头线来标示。
S1310,基于配置后的选择节点和配置后的行为节点生成行为树;配置的选择属性用于在运行行为树时选择与选择属性匹配的行为节点。
在一个实施例中,终端还选取除选择节点和行为节点之外的控制节点,如序列节点、平行节点和装饰节点。终端还可以为选择节点配置条件属性,根据选取的控制节点、配置后的选择节点和配置后的行为节点生成行为树。
例如,生成的行为树可参考图10,图中的ExecuteSwitchWeapon、ExecuteAttachTarget和ExecuteSDBomb等节点均配置有前置条件属性。
在一个实施例中,终端还获取行为树模型中定义的循环节点;为循环节点配置循环打断条件属性;循环打断条件属性用于打断当前循环执行的、与循环节点对应行为子节点的行为。
其中,循环节点为装饰节点中的一种节点。
上述实施例中,获取行为树模型中定义的选择节点,在选择节点中配置选择属性,便可以有针对性的选取与选择属性匹配的行为节点。选取行为树模型中定义的行为节点,为行为节点配置条件属性,以便于在执行行为树中的相应行为时无需利用条件节点来判断是否执行行为节点对应的行为,可以直接根据配置的条件属性来判断是否执行行为节点对应的行为,从而避免在行为树中使用条件节点,降低了行为树中的节点数量,提高了行为树的运行效率,进而提高人工智能行为的实现效率。
如图14所示,在一个实施例中,提供了另一种行为树生成方法,该行为树生成方法应用于终端。该终端具体可以包括台式电脑、笔记本电脑、平板电脑、智能手机以及掌上电脑等。参考图14,该行为树生成方法具体包括如下步骤:
S1402,获取待生成行为树的配置文件;配置文件中包含有与待生成行为树的选择节点对应的选择属性代码,以及包含有与待生成行为树的行为节点对应条件属性代码。
其中,配置文件中定义了行为树节点的逻辑规则,当前行为树中使用到的外部子树的信息,以及生成源代码时所需的信息。行为树的配置文件主要由desc_info和tree两部分组成,如图12所示。
描述信息(desc_info)中包含名字空间(namespace),类名(class_name),备注(remark),子行为树(sub_bhts),导入的行为节点类型(imported_action_classes)这些配置,namesapce和class_name分别指定行为树自动生成C++代码的名字空间和行为树类名。remark是行为树的描述信息,用于在生成行为树图形和编辑器中展示。sub_bhts配置了行为树中导入的外部行为树的信息,其中主要是指定外部行为树的包含路径include_dir和行为树名。imported_action_classes配置了行为树中所导入行为节点的信息,包括了行为节点所在的类文件全路径include_file和行为节点所在的类名。
tree部分定义了所有行为树节点的信息,tree的信息按照树形结构递归定义。每个tree节点包两个基本信息:节点的名称(name)和节点的类型(type),以及根据节点类型配置其它节点属性信息,如前置条件:pre_cond/pre_cond_node,打断条件break_cond/break_cond_node,循环次数times等。
S1404,根据获取的配置文件生成行为树;行为树的选择节点配置有由选择属性代码生成的选择属性,选择属性用于在运行行为树时选择与选择属性匹配的行为节点;行为树的行为节点配置有由条件属性代码条件属性,条件属性用于在执行行为节点对应的行为之前判断行为是否满足执行条件。
在一个实施例中,行为树的选择节点还可以配置有条件属性,如图10所示,图中的ExecuteSwitchWeapon、ExecuteAttachTarget和ExecuteSDBomb等节点均配置有前置条件属性。
上述实施例中,在待生成行为树的配置文件中包含有选择节点对应的选择属性代码,在生成相应的行为树时,选择节点中便可配置有选择属性,从而可以有针对性的选取与选择属性匹配的行为节点。此外,行为节点对应条件属性代码,在生成相应的行为树时,便可在行为节点配置有条件属性,从而在执行行为树中的相应行为时无需利用条件节点来判断是否执行行为节点对应的行为,可以直接根据配置的条件属性来判断是否执行行为节点对应的行为,从而避免在行为树中使用条件节点,降低了行为树中的节点数量,提高了行为树的运行效率,进而提高人工智能行为的实现效率。
对于传统的行为树,如比较知名的有Behaviac、Behavior Designer,两者都实现了通用行为树模型,并做了各自的扩展。但是他们的实现在节点性能以及节点功能方面不能完全满足codm手游项目的需求,主要有以下几个方面:前置条件以节点方式配置,导致条件节点过多影响性能,不能满足项目需求;已有的选择节点不能很好满足codm中游戏模式和AI功能需求;生成的代码不能很好地嵌入codm项目。
针对以上几个缺点,本发明实施例提出了一种改进的行为树,具体改进的内容如下所述:
(一)对于行为树中节点返回码的改进。
在本发明实施例的行为树中,除了通用行为树模型中定义的返回码类型外,还新增了BHT_SKIP返回码,该返回码使用在前置条件属性、打断条件属性、循环打断属性中。当前置条件属性返回Fail,打断条件属性和循环打断属性返回Success时,对应的宿主节点将返回BHT_SKIP返回码。BHT_SKIP返回码的含义将随着宿主节点的父节点类型不同而发生变化。若父节点是序列节点,则BHT_SKIP返回码相当于BHT_SUCCESS。若父节点是选择节点,则BHT_SKIP返回码相当于BHT_FAIL。若父节点是平行节点,该BHT_SKIP返回码将被忽略。若父节点只具有唯一子节点,将继续返回BHT_SKIP返回码。若父节点是装饰节点,将继续向上一级节点返回BHT_SKIP返回码。
(二)对选择节点的改进。
在本发明实施例的行为树中,除了通用模型中定义的各种选择节点外,还新增了by_token类型的选择节点。by_token类型的选择节点可称为配置有选择属性的选择节点。
如图3所示,图中虚线框的select_by_token(by_token)节点是行为树中新增的by_token类型的选择(selector)节点(即具有选择属性的选择节点),该选择节点设计了两个额外的属性:token_name和token_value,该节点下的所有子节点都有token_value属性,执行该select_by_token节点时,根据该选择节点的token_value值选择执行对应的子节点,并以该子节点的返回值作为select节点的返回值,若找不到与其token_value相匹配的子节点,则返回BHT_SKIP。例如,如图3所示,若该select_by_token节点的token_value值为sel_action2,则其下的子节点action2将被执行。
(三)配置条件判断功能。
为了减少行为树中的节点数量,提高行为树运行期效率,去掉行为树中独立的条件节点,设计了前置条件属性和打断条件属性。
行为树中为sequence、selector、parrallel、repeat四种节点增加了前置条件属性,前置条件属性可以使用pre_cond配置单个action,可以使用pre_cond_node配置节点组合,以实现较复杂的判断逻辑。
行为树中为action节点增加了打断条件属性,用于在action返回Running时,执行打断操作。打断条件属性可以用break_cond配置成单个action,可以break_cond_node配置成节点组合,以实现较复杂的判断逻辑。
pre_cond和break_cond属性可配置成action节点,pre_cond_node和break_cond_node属性可配置成任意节点类型,包括子树节点类型。
如图4中的pre_check(priority)即为通过pre_cond_node属性配置的节点组合,从而实现较复杂的前置条件判断。
如图4所示,pre_cond和pre_cond_node在行为树上都显示为pre_cond,pre_cond用于配置action节点,直接显示在节点的属性框内,pre_cond_node用于配置一颗子树,使用虚线箭头线来标示。
(四)行为树生成代码的实现方案。
在一个实施例中,终端根据行为树自动生成的C++代码主要继承自ibht类,并且在生成的行为树实例类中使用了ibht_context和ibht_rule的组合方式来搭建行为树的框架,在行为树的初始化过程中使用ibht_node类来创建各个具体节点,如图8所示。这些过程已经都隐含在自动生成的代码中,对使用者来说,只需要关注行为树的函数接口类提供的接口即可。需要说明的是,终端根据行为树还可自动生成python、或C#、或C语言代码。
类层次结构可参考图8,ibht是一个纯虚类,定义了行为树对外提供服务的所有函数接口。ibht_node定义了行为树中节点需要暴露的函数接口,该ibht_node接口主要给自动生成的行为树框架使用。ibht_rule:主要定义了行为树的运行函数接口。ibht_context相对比较复杂,主要用于维护行为树的运行状态,并负责行为树中子行为树的context创建,selector节点的token维护,running节点的状态维护,日志方式维护,以及用户数据userdata的存储等。ibht_context是行为树内部使用的类,外部使用者可以通过ibht接口来获取部分信息。
(五)配置文件实现方案
以上文中提到的AgentSDBT行为树为例来说明,生成行为树所采用的配置文件,其格式可以是xml格式,也可以是json格式。这里,以xml格式的配置文件AgenSDBT.xml为例进行说明,具体如下:
行为树的配置文件中定义了行为树节点的逻辑规则,当前行为树中使用到的外部子树的信息,以及生成源代码时所需的信息。行为树的配置文件主要由desc_info和tree两部分组成。
描述信息(desc_info)中包含namespace,class_name,remark,sub_bhts,imported_action_classes这些配置,namesapce和class_name分别指定行为树自动生成C++代码的名字空间和行为树类名。remark是行为树的描述信息,用于在生成行为树图形和编辑器中展示。sub_bhts配置了行为树中导入的外部行为树的信息,其中主要是指定外部行为树的包含路径include_dir和行为树名。imported_action_classes配置了行为树中所导入行为节点的信息,包括了行为节点所在的类文件全路径include_file和行为节点所在的类名。
tree部分定义了所有行为树节点的信息,tree的信息按照树形结构递归定义。每个tree节点包括两个基本信息:节点的name和节点的type,以及根据节点类型配置其它节点属性信息,如前置条件:pre_cond/pre_cond_node,打断条件break_cond/break_cond_node,循环次数times等。
本发明实施例中的行为树可应用于CODM手游中,降低了手游游戏玩法设计的复杂度,提升了玩法设计效率。通过代码生成器,根据行为树生成对应的代码,减少了代码开发的工作量,同时让开发人员从代码细节中摆脱出来,可以更专注于玩法的设计。基于行为树配置文件的图形可视化展示,提供了直观的展示方式,便于服务器开发人员和前台设计人员的交流。采用本发明实施例中的行为树生成方式,可提高行为节点的复用度,降低了代码复杂度,提高了工作效率。
应该理解的是,虽然图1、5-7、9、11、13-14的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图1、5-7、9、11、13-14中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
如图15所示,在一个实施例中,提供了一种行为执行装置,该行为执行装置具体包括:控制节点搜索模块1502、行为节点选取模块1504、条件属性获取模块1506和执行模块1508;其中:
控制节点搜索模块1502,用于搜索行为树中的控制节点;
行为节点选取模块1504,用于在搜索到的控制节点为配置有选择属性的节点时,选取与选择属性匹配的行为节点;
条件属性获取模块1506,用于获取行为节点中的条件属性;
执行模块1508,用于当根据条件属性确定行为节点对应的行为满足执行条件时,则执行行为节点对应的行为。
上述实施例中,搜索到配置有选择属性的控制节点,便可以有针对性的选取与选择属性匹配的行为节点。行为节点中配置有条件属性,无需利用条件节点来判断是否执行行为节点对应的行为,可以直接根据配置的条件属性来判断是否执行行为节点对应的行为,从而避免在行为树中使用条件节点,降低了行为树中的节点数量,提高了行为树的运行效率,进而提高人工智能行为的实现效率。
在一个实施例中,行为节点选取模块1504还用于确定控制节点的节点类型;在根据节点类型确定控制节点为配置有选择属性的节点时,则按照选择属性选取控制节点的子节点;当子节点为叶子节点时,将子节点确定为与选择属性匹配的行为节点。
上述实施例中,确定搜索到的控制节点的节点类型,在根据节点类型确定控制节点为配置有选择属性的节点时,便可根据选择属性选取控制节点的子节点,有针对性的选取行为节点。
在一个实施例中,如图16所示,该装置还包括:返回码生成模块1510、反馈模块1512和目标返回码确定模块1514;其中:
返回码生成模块1510,用于生成与执行行为节点对应的行为后所得的结果相匹配的返回码;
反馈模块1512,用于将返回码反馈至行为节点的父节点;
目标返回码确定模块1514,用于根据父节点的节点类型确定与返回码匹配的目标返回码;
反馈模块1512还用于将目标返回码反馈至父节点的上一级节点;反馈的目标返回码,用于指示上一级节点根据上一级节点的节点类型执行与目标返回码对应的操作。
上述实施例中,执行完行为节点对应的行为后,生成与结果相匹配的BHT_SKIP返回码,该BHT_SKIP返回码随着父节点的节点类型不同,其含义也发生相应的变化,一方面,既确保能够反馈正确的用于表示执行结果的BHT_SKIP返回码,根据该返回码执行后续的行为。另一方面,提高了返回码的多样性表示,有利于提高代码的编写效率。
在一个实施例中,如图16所示,该装置还包括:子节点搜索模块1516;其中:
子节点搜索模块1516,用于在搜索到的控制节点为未配置选择属性的节点时,则随机搜索控制节点的子节点;或者,按照优先级从大到小的顺序依次搜索控制节点的子节点;
条件属性获取模块1506还用于当搜索到的子节点为行为节点时,执行获取行为节点中的条件属性的步骤。
在一个实施例中,如图16所示,该装置还包括:处理模块1518;其中:
处理模块1518,用于确定行为树中各节点的节点类型;获取与节点类型对应的函数接口类;按照各节点之间的关系调用函数接口类中定义的函数接口;获取输入的与行为树中行为节点对应的行为操作函数和函数输入量;根据函数接口、行为操作函数和函数输入量生成操作指令;操作指令用于执行行为树中行为节点对应的行为。
上述实施例中,通过行为树可生成对应的计算机程序,按照各节点之间的关系调用函数接口类中定义的函数接口,获取输入的与行为树中行为节点对应的行为操作函数和函数输入量;根据函数接口、行为操作函数和函数输入量生成操作指令;操作指令用于执行行为树中行为节点对应的行为,从而完成了相应的行为操作。由于可以根据行为树生成对应的计算机程序,减少了代码开发的工作量,同时让开发人员从代码细节中摆脱出来,可以更专注于玩法的设计。
在一个实施例中,如图16所示,该装置还包括:选择节点获取模块1520、选择属性配置模块1522、行为节点选取模块1524、条件属性配置模块1526和行为树生成模块1528;其中:
选择节点获取模块1520,用于获取行为树模型中定义的选择节点;控制节点包括选择节点;
选择属性配置模块1522,用于在选择节点中配置选择属性;
行为节点选取模块1524,用于选取行为树模型中定义的行为节点;
条件属性配置模块1526,用于为行为节点配置条件属性;条件属性用于在执行行为节点对应的行为之前判断行为是否满足执行条件;
行为树生成模块1528,用于基于配置后的选择节点和配置后的行为节点生成行为树;配置的选择属性用于在运行行为树时选择与选择属性匹配的行为节点。
在一个实施例中,如图16所示,该装置还包括:删除模块1530;其中:
条件属性获取模块1506还用于获取与行为树模型定义的条件节点对应的前置条件属性和打断条件属性;
删除模块1530,用于删除行为树模型中定义的条件节点;
条件属性配置模块1526还用于为行为节点配置前置条件属性;前置条件属性用于在满足运行条件时执行行为节点对应的行为;为行为节点配置打断条件属性;打断条件属性用于在满足打断条件时中断行为节点对应的行为。
在一个实施例中,选择节点获取模块1520还用于获取行为树模型中定义的循环节点;
条件属性配置模块1526还用于为循环节点配置循环打断条件属性;循环打断条件属性用于打断当前循环执行的、与循环节点对应行为子节点的行为。
上述实施例中,获取行为树模型中定义的选择节点,在选择节点中配置选择属性,便可以有针对性的选取与选择属性匹配的行为节点。选取行为树模型中定义的行为节点,为行为节点配置条件属性,以便于在执行行为树中的相应行为时无需利用条件节点来判断是否执行行为节点对应的行为,可以直接根据配置的条件属性来判断是否执行行为节点对应的行为,从而避免在行为树中使用条件节点,降低了行为树中的节点数量,提高了行为树的运行效率,进而提高人工智能行为的实现效率。
在一个实施例中,如图16所示,该装置还包括:配置文件获取模块1532;其中:
配置文件获取模块1532,用于获取待生成行为树的配置文件;配置文件中包含有与待生成行为树的选择节点对应的选择属性代码,以及包含有与待生成行为树的行为节点对应条件属性代码;
行为树生成模块1528还用于根据获取的配置文件生成行为树;行为树的选择节点配置有由选择属性代码生成的选择属性,选择属性用于在运行行为树时选择与选择属性匹配的行为节点;行为树的行为节点配置有由条件属性代码条件属性,条件属性用于在执行行为节点对应的行为之前判断行为是否满足执行条件。
上述实施例中,在待生成行为树的配置文件中包含有选择节点对应的选择属性代码,在生成相应的行为树时,选择节点中便可配置有选择属性,从而可以有针对性的选取与选择属性匹配的行为节点。此外,行为节点对应条件属性代码,在生成相应的行为树时,便可在行为节点配置有条件属性,从而在执行行为树中的相应行为时无需利用条件节点来判断是否执行行为节点对应的行为,可以直接根据配置的条件属性来判断是否执行行为节点对应的行为,从而避免在行为树中使用条件节点,降低了行为树中的节点数量,提高了行为树的运行效率,进而提高人工智能行为的实现效率。
如图17所示,在一个实施例中,提供了一种行为树生成装置,该行为树生成装置具体包括:选择节点获取模块1702、选择属性配置模块1704、行为节点选取模块1706、条件属性配置模块1708和行为树生成模块1710;其中:
选择节点获取模块1702,用于获取行为树模型中定义的选择节点;
选择属性配置模块1704,用于在选择节点中配置选择属性;
行为节点选取模块1706,用于选取行为树模型中定义的行为节点;
条件属性配置模块1708,用于为行为节点配置条件属性;条件属性用于在执行行为节点对应的行为之前判断行为是否满足执行条件;
行为树生成模块1710,用于基于配置后的选择节点和配置后的行为节点生成行为树;配置的选择属性用于在运行行为树时选择与选择属性匹配的行为节点。
在一个实施例中,如图18所示,该装置还包括:条件属性获取模块1712、删除模块1714;其中:
条件属性获取模块1712,用于获取与行为树模型定义的条件节点对应的前置条件属性和打断条件属性;
删除模块1714,用于删除行为树模型中定义的条件节点;
条件属性配置模块1708还用于为行为节点配置前置条件属性;前置条件属性用于在满足运行条件时执行行为节点对应的行为;为行为节点配置打断条件属性;打断条件属性用于在满足打断条件时打断行为节点对应的行为。
上述实施例中,获取行为树模型中定义的选择节点,在选择节点中配置选择属性,便可以有针对性的选取与选择属性匹配的行为节点。选取行为树模型中定义的行为节点,为行为节点配置条件属性,以便于在执行行为树中的相应行为时无需利用条件节点来判断是否执行行为节点对应的行为,可以直接根据配置的条件属性来判断是否执行行为节点对应的行为,从而避免在行为树中使用条件节点,降低了行为树中的节点数量,提高了行为树的运行效率,进而提高人工智能行为的实现效率。
如图19所示,在一个实施例中,提供了一种行为树生成装置,该行为树生成装置具体包括:配置文件获取模块1902和行为树生成模块1904;其中:
配置文件获取模块1902,用于获取待生成行为树的配置文件;配置文件中包含有与待生成行为树的选择节点对应的选择属性代码,以及包含有与待生成行为树的行为节点对应条件属性代码;
行为树生成模块1904,用于根据获取的配置文件生成行为树;行为树的选择节点配置有由选择属性代码生成的选择属性,选择属性用于在运行行为树时选择与选择属性匹配的行为节点;行为树的行为节点配置有由条件属性代码条件属性,条件属性用于在执行行为节点对应的行为之前判断行为是否满足执行条件。
上述实施例中,在待生成行为树的配置文件中包含有选择节点对应的选择属性代码,在生成相应的行为树时,选择节点中便可配置有选择属性,从而可以有针对性的选取与选择属性匹配的行为节点。此外,行为节点对应条件属性代码,在生成相应的行为树时,便可在行为节点配置有条件属性,从而在执行行为树中的相应行为时无需利用条件节点来判断是否执行行为节点对应的行为,可以直接根据配置的条件属性来判断是否执行行为节点对应的行为,从而避免在行为树中使用条件节点,降低了行为树中的节点数量,提高了行为树的运行效率,进而提高人工智能行为的实现效率。
图20示出了一个实施例中计算机设备的内部结构图。如图20所示,该计算机设备包括该计算机设备包括通过***总线连接的处理器、存储器、网络接口、输入装置和显示屏。其中,存储器包括非易失性存储介质和内存储器。该计算机设备的非易失性存储介质存储有操作***,还可存储有计算机程序,该计算机程序被处理器执行时,可使得处理器实现行为执行方法。该内存储器中也可储存有计算机程序,该计算机程序被处理器执行时,可使得处理器执行行为执行方法。计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图20中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,本申请提供的行为执行装置可以实现为一种计算机程序的形式,计算机程序可在如图20所示的计算机设备上运行。计算机设备的存储器中可存储组成该行为执行装置的各个程序模块,比如,图15所示的控制节点搜索模块1502、行为节点选取模块1504、条件属性获取模块1506和执行模块1508。各个程序模块构成的计算机程序使得处理器执行本说明书中描述的本申请各个实施例的行为执行方法中的步骤。
例如,图20所示的计算机设备可以通过如图15所示的行为执行装置中的控制节点搜索模块1502执行S102。计算机设备可通过行为节点选取模块1504执行S104。计算机设备可通过条件属性获取模块1506执行S106。计算机设备可通过执行模块1508执行S108。
在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器存储有计算机程序,计算机程序被处理器执行时,使得处理器执行以下步骤:搜索行为树中的控制节点;在搜索到的控制节点为配置有选择属性的节点时,选取与选择属性匹配的行为节点;获取行为节点中的条件属性;当根据条件属性确定行为节点对应的行为满足执行条件时,则执行行为节点对应的行为。
在一个实施例中,计算机程序被处理器执行在搜索到的控制节点为配置有选择属性的节点时,选取与选择属性匹配的行为节点的步骤时,使得处理器具体执行以下步骤:在根据节点类型确定控制节点为配置有选择属性的节点时,则按照选择属性选取控制节点的子节点;当子节点为叶子节点时,将子节点确定为与选择属性匹配的行为节点。
在一个实施例中,计算机程序被处理器执行时,使得处理器还执行以下步骤:生成与执行行为节点对应的行为后所得的结果相匹配的返回码;将返回码反馈至行为节点的父节点;根据父节点的节点类型确定与返回码匹配的目标返回码;将目标返回码反馈至父节点的上一级节点;反馈的目标返回码,用于指示上一级节点根据上一级节点的节点类型执行与目标返回码对应的操作。
在一个实施例中,计算机程序被处理器执行时,使得处理器还执行以下步骤:在搜索到的控制节点为未配置选择属性的节点时,则随机搜索控制节点的子节点;或者,按照优先级从大到小的顺序依次搜索控制节点的子节点;当搜索到的子节点为行为节点时,执行获取行为节点中的条件属性的步骤。
在一个实施例中,计算机程序被处理器执行时,使得处理器还执行以下步骤:确定行为树中各节点的节点类型;获取与节点类型对应的函数接口类;按照各节点之间的关系调用函数接口类中定义的函数接口;获取输入的与行为树中行为节点对应的行为操作函数和函数输入量;根据函数接口、行为操作函数和函数输入量生成操作指令;操作指令用于执行行为树中行为节点对应的行为。
在一个实施例中,计算机程序被处理器执行时,使得处理器还执行以下步骤:获取行为树模型中定义的选择节点;控制节点包括选择节点;在选择节点中配置选择属性;选取行为树模型中定义的行为节点;为行为节点配置条件属性;条件属性用于在执行行为节点对应的行为之前判断行为是否满足执行条件;基于配置后的选择节点和配置后的行为节点生成行为树;配置的选择属性用于在运行行为树时选择与选择属性匹配的行为节点。
在一个实施例中,计算机程序被处理器执行时,使得处理器还执行以下步骤:获取与行为树模型定义的条件节点对应的前置条件属性和打断条件属性;删除行为树模型中定义的条件节点;为行为节点配置条件属性包括:为行为节点配置前置条件属性;前置条件属性用于在满足运行条件时执行行为节点对应的行为;为行为节点配置打断条件属性;打断条件属性用于在满足打断条件时中断行为节点对应的行为。
在一个实施例中,计算机程序被处理器执行时,使得处理器还执行以下步骤:获取行为树模型中定义的循环节点;为循环节点配置循环打断条件属性;循环打断条件属性用于打断当前循环执行的、与循环节点对应行为子节点的行为。
在一个实施例中,计算机程序被处理器执行时,使得处理器还执行以下步骤:获取待生成行为树的配置文件;配置文件中包含有与待生成行为树的选择节点对应的选择属性代码,以及包含有与待生成行为树的行为节点对应条件属性代码;根据获取的配置文件生成行为树;行为树的选择节点配置有由选择属性代码生成的选择属性,选择属性用于在运行行为树时选择与选择属性匹配的行为节点;行为树的行为节点配置有由条件属性代码条件属性,条件属性用于在执行行为节点对应的行为之前判断行为是否满足执行条件。
在一个实施例中,提供了一种计算机可读存储介质,存储有计算机程序,计算机程序被处理器执行时,使得处理器执行以下步骤:搜索行为树中的控制节点;在搜索到的控制节点为配置有选择属性的节点时,选取与选择属性匹配的行为节点;获取行为节点中的条件属性;当根据条件属性确定行为节点对应的行为满足执行条件时,则执行行为节点对应的行为。
在一个实施例中,计算机程序被处理器执行在搜索到的控制节点为配置有选择属性的节点时,选取与选择属性匹配的行为节点的步骤时,使得处理器具体执行以下步骤:在根据节点类型确定控制节点为配置有选择属性的节点时,则按照选择属性选取控制节点的子节点;当子节点为叶子节点时,将子节点确定为与选择属性匹配的行为节点。
在一个实施例中,计算机程序被处理器执行时,使得处理器还执行以下步骤:生成与执行行为节点对应的行为后所得的结果相匹配的返回码;将返回码反馈至行为节点的父节点;根据父节点的节点类型确定与返回码匹配的目标返回码;将目标返回码反馈至父节点的上一级节点;反馈的目标返回码,用于指示上一级节点根据上一级节点的节点类型执行与目标返回码对应的操作。
在一个实施例中,计算机程序被处理器执行时,使得处理器还执行以下步骤:在搜索到的控制节点为未配置选择属性的节点时,则随机搜索控制节点的子节点;或者,按照优先级从大到小的顺序依次搜索控制节点的子节点;当搜索到的子节点为行为节点时,执行获取行为节点中的条件属性的步骤。
在一个实施例中,计算机程序被处理器执行时,使得处理器还执行以下步骤:确定行为树中各节点的节点类型;获取与节点类型对应的函数接口类;按照各节点之间的关系调用函数接口类中定义的函数接口;获取输入的与行为树中行为节点对应的行为操作函数和函数输入量;根据函数接口、行为操作函数和函数输入量生成操作指令;操作指令用于执行行为树中行为节点对应的行为。
在一个实施例中,计算机程序被处理器执行时,使得处理器还执行以下步骤:获取行为树模型中定义的选择节点;控制节点包括选择节点;在选择节点中配置选择属性;选取行为树模型中定义的行为节点;为行为节点配置条件属性;条件属性用于在执行行为节点对应的行为之前判断行为是否满足执行条件;基于配置后的选择节点和配置后的行为节点生成行为树;配置的选择属性用于在运行行为树时选择与选择属性匹配的行为节点。
在一个实施例中,计算机程序被处理器执行时,使得处理器还执行以下步骤:获取与行为树模型定义的条件节点对应的前置条件属性和打断条件属性;删除行为树模型中定义的条件节点;为行为节点配置条件属性包括:为行为节点配置前置条件属性;前置条件属性用于在满足运行条件时执行行为节点对应的行为;为行为节点配置打断条件属性;打断条件属性用于在满足打断条件时中断行为节点对应的行为。
在一个实施例中,计算机程序被处理器执行时,使得处理器还执行以下步骤:获取行为树模型中定义的循环节点;为循环节点配置循环打断条件属性;循环打断条件属性用于打断当前循环执行的、与循环节点对应行为子节点的行为。
在一个实施例中,计算机程序被处理器执行时,使得处理器还执行以下步骤:获取待生成行为树的配置文件;配置文件中包含有与待生成行为树的选择节点对应的选择属性代码,以及包含有与待生成行为树的行为节点对应条件属性代码;根据获取的配置文件生成行为树;行为树的选择节点配置有由选择属性代码生成的选择属性,选择属性用于在运行行为树时选择与选择属性匹配的行为节点;行为树的行为节点配置有由条件属性代码条件属性,条件属性用于在执行行为节点对应的行为之前判断行为是否满足执行条件。
图21示出了一个实施例中计算机设备的内部结构图。如图21所示,该计算机设备包括该计算机设备包括通过***总线连接的处理器、存储器、网络接口、输入装置和显示屏。其中,存储器包括非易失性存储介质和内存储器。该计算机设备的非易失性存储介质存储有操作***,还可存储有计算机程序,该计算机程序被处理器执行时,可使得处理器实现行为树生成方法。该内存储器中也可储存有计算机程序,该计算机程序被处理器执行时,可使得处理器执行行为树生成方法。计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图21中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,本申请提供的行为树生成装置可以实现为一种计算机程序的形式,计算机程序可在如图21所示的计算机设备上运行。计算机设备的存储器中可存储组成该行为树生成装置的各个程序模块,比如,图17所示的选择节点获取模块1702、选择属性配置模块1704、行为节点选取模块1706、条件属性配置模块1708和行为树生成模块1710。各个程序模块构成的计算机程序使得处理器执行本说明书中描述的本申请各个实施例的行为树生成方法中的步骤。
例如,图21所示的计算机设备可以通过如图17所示的行为树生成装置中的选择节点获取模块1702执行S1302。计算机设备可通过选择属性配置模块1704执行S1304。计算机设备可通过行为节点选取模块1706执行S1306。计算机设备可通过条件属性配置模块1708执行S1308。计算机设备可通过行为树生成模块1710执行S1310。
在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器存储有计算机程序,计算机程序被处理器执行时,使得处理器执行以下步骤:获取行为树模型中定义的选择节点;在选择节点中配置选择属性;选取行为树模型中定义的行为节点;为行为节点配置条件属性;条件属性用于在执行行为节点对应的行为之前判断行为是否满足执行条件;基于配置后的选择节点和配置后的行为节点生成行为树;配置的选择属性用于在运行行为树时选择与选择属性匹配的行为节点。
在一个实施例中,计算机程序被处理器执行时,使得处理器还执行以下步骤:获取与行为树模型定义的条件节点对应的前置条件属性和打断条件属性;删除行为树模型中定义的条件节点;为行为节点配置条件属性包括:为行为节点配置前置条件属性;前置条件属性用于在满足运行条件时执行行为节点对应的行为;为行为节点配置打断条件属性;打断条件属性用于在满足打断条件时打断行为节点对应的行为。
在一个实施例中,提供了一种计算机可读存储介质,存储有计算机程序,计算机程序被处理器执行时,使得处理器执行以下步骤:获取行为树模型中定义的选择节点;在选择节点中配置选择属性;选取行为树模型中定义的行为节点;为行为节点配置条件属性;条件属性用于在执行行为节点对应的行为之前判断行为是否满足执行条件;基于配置后的选择节点和配置后的行为节点生成行为树;配置的选择属性用于在运行行为树时选择与选择属性匹配的行为节点。
在一个实施例中,计算机程序被处理器执行时,使得处理器还执行以下步骤:获取与行为树模型定义的条件节点对应的前置条件属性和打断条件属性;删除行为树模型中定义的条件节点;为行为节点配置条件属性包括:为行为节点配置前置条件属性;前置条件属性用于在满足运行条件时执行行为节点对应的行为;为行为节点配置打断条件属性;打断条件属性用于在满足打断条件时打断行为节点对应的行为。
图22示出了一个实施例中计算机设备的内部结构图。如图22所示,该计算机设备包括该计算机设备包括通过***总线连接的处理器、存储器、网络接口、输入装置和显示屏。其中,存储器包括非易失性存储介质和内存储器。该计算机设备的非易失性存储介质存储有操作***,还可存储有计算机程序,该计算机程序被处理器执行时,可使得处理器实现行为树生成方法。该内存储器中也可储存有计算机程序,该计算机程序被处理器执行时,可使得处理器执行行为树生成方法。计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图22中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,本申请提供的行为树生成装置可以实现为一种计算机程序的形式,计算机程序可在如图22所示的计算机设备上运行。计算机设备的存储器中可存储组成该行为树生成装置的各个程序模块,比如,图19所示的配置文件获取模块1902和行为树生成模块1904。各个程序模块构成的计算机程序使得处理器执行本说明书中描述的本申请各个实施例的行为树生成方法中的步骤。
例如,图22所示的计算机设备可以通过如图19所示的行为树生成装置中的配置文件获取模块1902执行S1402。计算机设备可通过行为树生成模块1904执行S1404。
在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器存储有计算机程序,计算机程序被处理器执行时,使得处理器执行以下步骤:获取待生成行为树的配置文件;配置文件中包含有与待生成行为树的选择节点对应的选择属性代码,以及包含有与待生成行为树的行为节点对应条件属性代码;根据获取的配置文件生成行为树;行为树的选择节点配置有由选择属性代码生成的选择属性,选择属性用于在运行行为树时选择与选择属性匹配的行为节点;行为树的行为节点配置有由条件属性代码条件属性,条件属性用于在执行行为节点对应的行为之前判断行为是否满足执行条件。
在一个实施例中,提供了一种计算机可读存储介质,存储有计算机程序,计算机程序被处理器执行时,使得处理器执行以下步骤:获取待生成行为树的配置文件;配置文件中包含有与待生成行为树的选择节点对应的选择属性代码,以及包含有与待生成行为树的行为节点对应条件属性代码;根据获取的配置文件生成行为树;行为树的选择节点配置有由选择属性代码生成的选择属性,选择属性用于在运行行为树时选择与选择属性匹配的行为节点;行为树的行为节点配置有由条件属性代码条件属性,条件属性用于在执行行为节点对应的行为之前判断行为是否满足执行条件。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一非易失性计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

Claims (16)

1.一种行为执行方法,包括:
搜索行为树中的控制节点;
在搜索到的控制节点为配置有选择属性的节点时,选取与所述选择属性匹配的行为节点;
获取所述行为节点中的条件属性;所述条件属性包括前置条件属性、打断条件属性和循环打断属性;所述前置条件属性用于在满足运行条件时执行所述行为节点对应的行为;所述循环打断条件属性用于打断当前循环执行的、与所述循环节点对应行为子节点的行为;所述打断条件属性用于在满足打断条件时打断所述行为节点对应的行为;
当根据所述条件属性确定所述行为节点对应的行为满足执行条件时,则执行所述行为节点对应的行为。
2.根据权利要求1所述的方法,其特征在于,所述在搜索到的控制节点为配置有选择属性的节点时,选取与所述选择属性匹配的行为节点包括:
确定所述控制节点的节点类型;
在根据所述节点类型确定所述控制节点为配置有选择属性的节点时,则按照所述选择属性选取所述控制节点的子节点;
当所述子节点为叶子节点时,将所述子节点确定为与所述选择属性匹配的行为节点。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
生成与执行所述行为节点对应的行为后所得的结果相匹配的返回码;
将所述返回码反馈至所述行为节点的父节点;
根据所述父节点的节点类型确定与所述返回码匹配的目标返回码;
将所述目标返回码反馈至所述父节点的上一级节点;反馈的所述目标返回码,用于指示所述上一级节点根据所述上一级节点的节点类型执行与所述目标返回码对应的操作。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在搜索到的控制节点为未配置选择属性的节点时,则
随机搜索所述控制节点的子节点;或者,
按照优先级从大到小的顺序依次搜索所述控制节点的子节点;
当搜索到的子节点为行为节点时,执行所述获取所述行为节点中的条件属性的步骤。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
确定所述行为树中各节点的节点类型;
获取与所述节点类型对应的函数接口类;
按照所述各节点之间的关系调用所述函数接口类中定义的函数接口;
获取输入的与所述行为树中行为节点对应的行为操作函数和函数输入量;
根据所述函数接口、所述行为操作函数和函数输入量生成操作指令;所述操作指令用于执行所述行为树中行为节点对应的行为。
6.根据权利要求1所述的方法,其特征在于,所述方法还包括:
获取行为树模型中定义的选择节点;所述控制节点包括所述选择节点;
在所述选择节点中配置选择属性;
选取所述行为树模型中定义的行为节点;
为所述行为节点配置条件属性;所述条件属性用于在执行所述行为节点对应的行为之前判断所述行为是否满足执行条件;
基于配置后的选择节点和配置后的行为节点生成行为树;配置的所述选择属性用于在运行所述行为树时选择与所述选择属性匹配的行为节点。
7.根据权利要求6所述的方法,其特征在于,所述方法还包括:
获取与行为树模型定义的条件节点对应的前置条件属性和打断条件属性;
删除行为树模型中定义的条件节点;
所述为所述行为节点配置条件属性包括:
为所述行为节点配置所述前置条件属性;
为所述行为节点配置所述打断条件属性。
8.根据权利要求6或7所述的方法,其特征在于,所述方法还包括:
获取所述行为树模型中定义的循环节点;
为所述循环节点配置循环打断条件属性。
9.根据权利要求1至7任一项所述的方法,其特征在于,所述方法还包括:
获取待生成行为树的配置文件;所述配置文件中包含有与所述待生成行为树的选择节点对应的选择属性代码,以及包含有与所述待生成行为树的行为节点对应条件属性代码;
根据获取的配置文件生成行为树;所述行为树的选择节点配置有由所述选择属性代码生成的选择属性,所述选择属性用于在运行所述行为树时选择与所述选择属性匹配的行为节点;所述行为树的行为节点配置有由所述条件属性代码条件属性,所述条件属性用于在执行所述行为节点对应的行为之前判断所述行为是否满足执行条件。
10.一种行为树生成方法,包括:
获取行为树模型中定义的选择节点;
在所述选择节点中配置选择属性;
选取所述行为树模型中定义的行为节点;
为所述行为节点配置条件属性;所述条件属性包括前置条件属性、打断条件属性和循环打断属性,用于在执行所述行为节点对应的行为之前判断所述行为是否满足执行条件;所述前置条件属性用于在满足运行条件时执行所述行为节点对应的行为;所述循环打断条件属性用于打断当前循环执行的、与所述循环节点对应行为子节点的行为;所述打断条件属性用于在满足打断条件时打断所述行为节点对应的行为;
基于配置后的选择节点和配置后的行为节点生成行为树;配置的所述选择属性用于在运行所述行为树时选择与所述选择属性匹配的行为节点。
11.根据权利要求10所述的方法,其特征在于,所述方法还包括:
获取与行为树模型定义的条件节点对应的前置条件属性和打断条件属性;
删除行为树模型中定义的条件节点;
所述为所述行为节点配置条件属性包括:
为所述行为节点配置所述前置条件属性;
为所述行为节点配置所述打断条件属性。
12.一种行为树生成方法,包括:
获取待生成行为树的配置文件;所述配置文件中包含有与所述待生成行为树的选择节点对应的选择属性代码,以及包含有与所述待生成行为树的行为节点对应条件属性代码;
根据获取的配置文件生成行为树;行为树的选择节点配置有由选择属性代码生成的选择属性,所述选择属性包括前置条件属性、打断条件属性和循环打断属性,用于在运行所述行为树时选择与所述选择属性匹配的行为节点;所述前置条件属性用于在满足运行条件时执行所述行为节点对应的行为;所述循环打断条件属性用于打断当前循环执行的、与所述循环节点对应行为子节点的行为;所述打断条件属性用于在满足打断条件时打断所述行为节点对应的行为;所述行为树的行为节点配置有由所述条件属性代码条件属性,所述条件属性用于在执行所述行为节点对应的行为之前判断所述行为是否满足执行条件。
13.一种行为执行装置,包括:
控制节点搜索模块,用于搜索行为树中的控制节点;
行为节点选取模块,用于在搜索到的控制节点为配置有选择属性的节点时,选取与所述选择属性匹配的行为节点;
条件属性获取模块,用于获取所述行为节点中的条件属性;所述条件属性包括前置条件属性、打断条件属性和循环打断属性;所述前置条件属性用于在满足运行条件时执行所述行为节点对应的行为;所述循环打断条件属性用于打断当前循环执行的、与所述循环节点对应行为子节点的行为;所述打断条件属性用于在满足打断条件时打断所述行为节点对应的行为;
执行模块,用于当根据所述条件属性确定所述行为节点对应的行为满足执行条件时,则执行所述行为节点对应的行为。
14.一种行为树生成装置,包括:
选择节点获取模块,用于获取行为树模型中定义的选择节点;
选择属性配置模块,用于在所述选择节点中配置选择属性;
行为节点选取模块,用于选取所述行为树模型中定义的行为节点;
条件属性配置模块,用于为所述行为节点配置条件属性;所述条件属性包括前置条件属性、打断条件属性和循环打断属性,用于在执行所述行为节点对应的行为之前判断所述行为是否满足执行条件;所述前置条件属性用于在满足运行条件时执行所述行为节点对应的行为;所述循环打断条件属性用于打断当前循环执行的、与所述循环节点对应行为子节点的行为;所述打断条件属性用于在满足打断条件时打断所述行为节点对应的行为;
行为树生成模块,用于基于配置后的选择节点和配置后的行为节点生成行为树;配置的所述选择属性用于在运行所述行为树时选择与所述选择属性匹配的行为节点。
15.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行如权利要求1至12中任一项所述方法的步骤。
16.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至12中任一项所述的方法的步骤。
CN201811099417.2A 2018-09-20 2018-09-20 行为执行方法、行为树生成方法、装置和计算机设备 Active CN109189504B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811099417.2A CN109189504B (zh) 2018-09-20 2018-09-20 行为执行方法、行为树生成方法、装置和计算机设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811099417.2A CN109189504B (zh) 2018-09-20 2018-09-20 行为执行方法、行为树生成方法、装置和计算机设备

Publications (2)

Publication Number Publication Date
CN109189504A CN109189504A (zh) 2019-01-11
CN109189504B true CN109189504B (zh) 2020-04-28

Family

ID=64908775

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811099417.2A Active CN109189504B (zh) 2018-09-20 2018-09-20 行为执行方法、行为树生成方法、装置和计算机设备

Country Status (1)

Country Link
CN (1) CN109189504B (zh)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110102054A (zh) * 2019-05-10 2019-08-09 网易(杭州)网络有限公司 行为树的执行优化方法、装置及存储介质
CN110377040A (zh) * 2019-07-31 2019-10-25 北京智行者科技有限公司 基于行为树的自动驾驶决策方法及装置
CN111111202B (zh) * 2019-12-26 2023-08-29 北京像素软件科技股份有限公司 游戏ai行为逻辑控制方法和***
CN111208927B (zh) * 2019-12-30 2021-09-07 国电南瑞科技股份有限公司 一种适用于电力***二次设备的人机接口及人机交互方法
EP4040293A1 (en) * 2021-02-04 2022-08-10 Magazino GmbH Controlling an apparatus, e.g., a robot, with a behavior tree
CN113835433A (zh) * 2021-09-28 2021-12-24 国汽智控(北京)科技有限公司 自动驾驶控制方法、装置、设备、存储介质及程序产品
WO2024031695A1 (zh) * 2022-08-12 2024-02-15 西门子股份公司 需求描述数据重用方法、装置和存储介质
CN117389569B (zh) * 2023-10-26 2024-06-14 重庆猪哥亮科技有限责任公司 一种程序解释执行方法

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105653271A (zh) * 2015-12-28 2016-06-08 网易(杭州)网络有限公司 行为树的静态解析、执行以及优化方法和装置
CN105656688A (zh) * 2016-03-03 2016-06-08 腾讯科技(深圳)有限公司 状态控制方法和装置
CN106155658A (zh) * 2015-04-08 2016-11-23 广州四三九九信息科技有限公司 基于u3d插件机制实现的行为树编辑器
CN106250100A (zh) * 2016-08-15 2016-12-21 腾讯科技(深圳)有限公司 ***逻辑控制方法及装置
CN106647354A (zh) * 2016-10-31 2017-05-10 遨博(北京)智能科技有限公司 一种控制方法、装置及***
CN106959850A (zh) * 2017-03-02 2017-07-18 上海时年信息科技有限公司 自动生成行为树代码的方法及***
CN107115673A (zh) * 2017-04-27 2017-09-01 腾讯科技(深圳)有限公司 一种基于行为树的行为执行方法和装置
CN107943707A (zh) * 2017-12-19 2018-04-20 网易(杭州)网络有限公司 行为树的测试方法、装置和存储介质以及终端

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160253155A1 (en) * 2015-02-27 2016-09-01 The Treeline Company Apparatus and method for metaprogramming platform

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106155658A (zh) * 2015-04-08 2016-11-23 广州四三九九信息科技有限公司 基于u3d插件机制实现的行为树编辑器
CN105653271A (zh) * 2015-12-28 2016-06-08 网易(杭州)网络有限公司 行为树的静态解析、执行以及优化方法和装置
CN105656688A (zh) * 2016-03-03 2016-06-08 腾讯科技(深圳)有限公司 状态控制方法和装置
CN106250100A (zh) * 2016-08-15 2016-12-21 腾讯科技(深圳)有限公司 ***逻辑控制方法及装置
CN106647354A (zh) * 2016-10-31 2017-05-10 遨博(北京)智能科技有限公司 一种控制方法、装置及***
CN106959850A (zh) * 2017-03-02 2017-07-18 上海时年信息科技有限公司 自动生成行为树代码的方法及***
CN107115673A (zh) * 2017-04-27 2017-09-01 腾讯科技(深圳)有限公司 一种基于行为树的行为执行方法和装置
CN107943707A (zh) * 2017-12-19 2018-04-20 网易(杭州)网络有限公司 行为树的测试方法、装置和存储介质以及终端

Also Published As

Publication number Publication date
CN109189504A (zh) 2019-01-11

Similar Documents

Publication Publication Date Title
CN109189504B (zh) 行为执行方法、行为树生成方法、装置和计算机设备
CN111552473B (zh) 一种应用程序的处理方法、装置及设备
US11383162B2 (en) Voice skill game editing method, apparatus, device and readable storage medium
CN111666526B (zh) 页面生成方法、装置、设备及存储介质
CN105511873B (zh) 用户界面控件展示方法及装置
CN109189469B (zh) 基于反射的安卓应用微服务化方法及***
CN105739983B (zh) 脚本程序编辑装置及其实现方法
CN109189374B (zh) 基于对象引用链的对象构造代码生成方法及***
EP3667493B1 (en) A method for a software development system
CN109240666B (zh) 基于调用栈和依赖路径的函数调用代码生成方法及***
JP2006085740A (ja) アプリケ―ションソフトウェア構成方法
CN111209000B (zh) 自定义控件的处理方法、装置、电子设备及存储介质
CN113986241A (zh) 一种基于知识图谱的业务规则的配置方法以及装置
CA3142770A1 (en) Component linkage configuration method, device, computer equipment and storage medium
CN111258434B (zh) 在聊天界面***图片的方法、装置、设备及存储介质
CN112685025A (zh) 快速搭建前端页面的方法及***
CN114490658A (zh) 一种节点展示方法、装置、存储介质及程序产品
CN116304442A (zh) 页面代码生成方法、装置、电子设备以及存储介质
Arondi et al. Supporting co-evolution of users and systems by the recognition of Interaction Patterns
CN114816170A (zh) 规则方案生成方法、装置、介质及电子设备
CN112138380A (zh) 一种游戏中数据编辑的方法和装置
CN117218239A (zh) 一种数据处理方法、装置、电子设备及可读存储介质
Saied et al. Visualization based API usage patterns refining
CN112732243B (zh) 一种用于生成功能组件的数据处理方法及装置
CN115291857A (zh) 一种可视化的业务规则编排方法及配置器

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant