资源对象差异处理方法、装置、电子设备及存储介质与流程

摘要: 本技术涉及游戏开发,尤其涉及一种资源对象差异处理方法、装置、电子设备及存储介质。背景技术:1、在unity游戏项目开发中,prefab是一类承载gameobje...
资源对象差异处理方法、装置、电子设备及存储介质与流程

本技术涉及游戏开发,尤其涉及一种资源对象差异处理方法、装置、电子设备及存储介质。

背景技术:

1、在unity游戏项目开发中,prefab是一类承载gameobject层级、组件配置、资源引用和序列化参数的重要资源。角色、界面、关卡对象、特效、交互物体等通常均以prefab形式沉淀和复用。随着项目迭代推进,同一prefab可能在不同分支、不同版本、不同美术或策划配置流程中被分别修改,开发人员需要确认两个prefab之间是否存在层级节点增删、组件增删、gameobject基础属性变化以及组件序列化字段变化。

2、现有开发流程中,常见做法包括通过unity原生prefab override面板查看单个prefab实例相对于源prefab的覆盖项;通过文本化yaml文件进行版本差异比较;通过git、svn等版本控制工具进行文件级diff或merge;或者依赖资源guid、版本提交记录、ci变更列表等信息判断资源是否发生变化。上述方法能够在一定程度上帮助开发人员定位变更,但其关注点通常停留在实例覆盖、文本行、文件或资源依赖层面,难以直接映射到两个prefab资产之间的gameobject节点、组件和序列化属性差异。

3、对于prefab这类具有树形层级和组件化结构的资源,仅使用文本差异工具往往无法准确表达“同一层级下哪个节点对应哪个节点”、“同一对象上哪个组件对应哪个组件”、“对象引用字段是否指向同一资源”等语义信息。尤其当同名节点、同类型多组件、missingscript、嵌套prefab实例、prefab variant、对象引用等情况出现时,文本级比较或人工比较容易产生误判或漏判。

技术实现思路

1、为了克服现有技术的不足,本发明提供一种资源对象差异处理方法、装置、电子设备及存储介质,能够精准识别资源对象的结构与属性差异,支持双向选择性同步及闭环验证,提升差异处理准确性和可操作性。

2、本技术的第一方面提供一种资源对象差异处理方法,所述方法包括:

3、获取第一资源对象和第二资源对象,对所述第一资源对象进行结构化解析,生成对应所述第一资源对象的第一结构快照;对所述第二资源对象进行结构化解析,生成对应所述第二资源对象的第二结构快照;

4、基于所述第一结构快照和所述第二结构快照,从根节点开始递归构建差异树;所述差异树由差异节点构成,每个差异节点至少记录第一侧节点、第二侧节点和差异类型;所述差异类型包括仅存在于第一侧、仅存在于第二侧、两侧均存在且存在差异、及两侧均存在且一致;其中,若所述第一结构快照的第一根节点和所述第二结构快照的第二根节点均存在,对所述第一根节点和所述第二根节点的子节点执行匹配操作后,递归构建各子差异节点;

5、所述对所述第一根节点和所述第二根节点的子节点执行匹配操作包括:

6、获取当前父节点下第一侧的全部子节点作为第一子节点集合,获取当前父节点下第二侧的全部子节点作为第二子节点集合;

7、以各子节点的名称作为分组键,对所述第二子节点集合中的各子节点进行分组;

8、依次遍历所述第一子节点集合中的各第一子节点,在与该第一子节点同名的未匹配的第二子节点候选中,分别计算该第一子节点与各候选第二子节点之间的结构匹配度量;

9、选择所述结构匹配度量最优的候选第二子节点作为该第一子节点的匹配节点,并将该候选第二子节点标记为已匹配;

10、将遍历完成后未被匹配的第一子节点标记为仅存在于第一侧,将所述第二子节点集合中未被标记为已匹配的各第二子节点标记为仅存在于第二侧;

11、响应于用户对所述差异树中目标差异项的选择性操作,将所述目标差异项对应的内容从所述第一侧复制到所述第二侧,或从所述第二侧复制到所述第一侧;

12、将同步后的内容写回至目标资源对象,并重新执行结构化解析和差异树构建的操作,以更新所述差异树;所述目标资源对象为所述第一资源对象或所述第二资源对象。

13、在一个可选的实施方式中,所述对所述第一资源对象进行结构化解析,生成对应所述第一资源对象的第一结构快照包括:

14、从所述第一资源对象的根结构单元开始递归遍历层级结构,将遍历到的每个结构单元转换为一个节点对象;所述节点对象至少包含对应结构单元的层级位置信息、属性信息和子节点集合;

15、对遍历到的每个节点对象,提取该节点对象上挂载的各组件,为每个组件生成组件快照;所述组件快照至少包含组件类型信息和序列化属性信息;

16、将全部所述节点对象按照各节点在所述第一资源对象中的原始层级关系组织为树形结构,得到所述第一结构快照。

17、在一个可选的实施方式中,所述基于所述第一结构快照和所述第二结构快照,从根节点开始递归构建差异树包括:

18、获取所述第一结构快照的根节点作为第一根节点,获取所述第二结构快照的根节点作为第二根节点;

19、判断所述第一根节点和所述第二根节点是否均存在;

20、若仅存在所述第一根节点,创建差异类型为仅存在于第一侧的差异节点,并递归遍历所述第一根节点的全部后代节点,为每个后代节点创建差异类型为仅存在于第一侧的差异节点;

21、若仅存在所述第二根节点,创建差异类型为仅存在于第二侧的差异节点,并递归遍历所述第二根节点的全部后代节点,为每个后代节点创建差异类型为仅存在于第二侧的差异节点;

22、若所述第一根节点和所述第二根节点均存在,比较所述第一根节点和所述第二根节点的节点属性信息,生成节点级属性差异信息;对所述第一根节点和所述第二根节点各自所关联的组件快照进行组件匹配,并对匹配成功的各组件的序列化属性进行属性比较,生成组件级差异信息;

23、根据所述节点级属性差异信息和所述组件级差异信息生成差异节点;其中,若存在差异则差异类型为两侧均存在但存在差异,若不存在差异则差异类型为两侧均存在且一致;

24、对所述第一根节点和所述第二根节点的子节点执行匹配操作后,递归构建各子差异节点。

25、在一个可选的实施方式中,所述对所述第一根节点和所述第二根节点的子节点执行匹配操作包括:

26、获取当前父节点下第一侧的全部子节点作为第一子节点集合,获取当前父节点下第二侧的全部子节点作为第二子节点集合;

27、以各子节点的名称作为分组键,对所述第二子节点集合中的各子节点进行分组;

28、依次遍历所述第一子节点集合中的各第一子节点,在与该第一子节点同名的未匹配的第二子节点候选中,分别计算该第一子节点与各候选第二子节点之间的结构匹配度量;

29、选择所述结构匹配度量最优的候选第二子节点作为该第一子节点的匹配节点,并将该候选第二子节点标记为已匹配;

30、将遍历完成后未被匹配的第一子节点标记为仅存在于第一侧,将所述第二子节点集合中未被标记为已匹配的各第二子节点标记为仅存在于第二侧。

31、在一个可选的实施方式中,所述结构匹配度量基于以下因子中的至少两项加权计算确定:同级索引差值、所关联组件数量差值、组件类型集合的差异度量、直接子节点名称集合的差异度量;其中所述组件类型集合的差异度量为两节点所挂载全部组件类型多重集合的差异数量,所述直接子节点名称集合的差异度量为两节点全部直接子节点名称多重集合的差异数量。

32、在一个可选的实施方式中,所述将所述目标差异项对应的内容从所述第一侧复制到所述第二侧,或从所述第二侧复制到所述第一侧包括:

33、当所述目标差异项为节点属性差异时,将源侧节点的属性值复制到目标侧对应节点中;

34、当所述目标差异项为组件差异时,若目标侧存在对应组件,则将源侧对应组件的全部差异属性值复制到目标侧对应组件中;若目标侧不存在对应组件,则在目标侧创建与源侧相同类型的组件,并将源侧该组件的全部属性值复制到目标侧新建组件中;

35、当所述目标差异项为节点差异时,将源侧节点及源侧节点全部子节点和所关联的组件一并复制到目标侧的对应父节点下;

36、当所述源侧节点为嵌套资源对象实例时,在将源侧节点及源侧节点全部子节点和所关联的组件复制到目标侧后,保持嵌套资源对象实例与源资源对象资产之间的链接关系及覆盖关系。

37、在一个可选的实施方式中,所述将同步后的内容写回至目标资源对象包括:

38、在执行写回操作之前,验证所述目标资源对象为合法的可写入资源资产;

39、在执行写回操作过程中,通过撤销记录机制记录所述写回操作;

40、在执行写回操作之后,保存所述目标资源对象。

41、本技术第二方面提供一种资源对象差异处理装置,所述装置包括:

42、解析模块,用于获取第一资源对象和第二资源对象,对所述第一资源对象进行结构化解析,生成对应所述第一资源对象的第一结构快照;对所述第二资源对象进行结构化解析,生成对应所述第二资源对象的第二结构快照;

43、差异树生成模块,用于基于所述第一结构快照和所述第二结构快照,从根节点开始递归构建差异树;所述差异树由差异节点构成,每个差异节点至少记录第一侧节点、第二侧节点和差异类型;所述差异类型包括仅存在于第一侧、仅存在于第二侧、两侧均存在且存在差异、及两侧均存在且一致;

44、定向同步写回模块,用于响应于用户对所述差异树中目标差异项的选择性操作,将所述目标差异项对应的内容从所述第一侧复制到所述第二侧,或从所述第二侧复制到所述第一侧;将同步后的内容写回至目标资源对象,并重新执行结构化解析和差异树构建的操作,以更新所述差异树;所述目标资源对象为所述第一资源对象或所述第二资源对象。

45、本技术第三方面提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现所述资源对象差异处理方法的步骤。

46、本技术第四方面提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述资源对象差异处理方法的步骤。

47、综上所述,本技术提供的资源对象差异处理方法、装置、电子设备及存储介质,至少存在以下一种有益效果:

48、1、对两个资源对象进行结构化解析,生成包含层级路径、组件列表、属性键值对及资源guid的结构快照,而非保留原始的yaml文本行。在此基础上,从根节点递归构建差异树,按路径精确匹配左右两侧的节点。差异树中的每个差异节点都明确记录第一侧节点、第二侧节点以及差异类型(仅左、仅右、都有且有差异、都有且一致)。由此,两个资源对象之间的比较不再是文本字符的加减,而是树形节点的逻辑映射,能够直接回答“哪个节点对应哪个节点”、“哪个组件对应哪个组件”、“对象引用是否指向同一资源”等语义级问题;

49、2、由于结构快照独立记录了节点层级(父子关系、子节点列表)和节点内的序列化属性字段,递归构建差异树时,可以明确分类。若某路径在一侧缺失,则为节点增删;若两侧路径都存在但子节点数量或组件类型不同,则为结构差异;若节点与组件均匹配但属性值不同,则为属性差异。差异树中的四种差异类型天然将结构变动与内容变动分开,避免了文本diff中增加行和删除行混在一起、难以解读的问题;

50、3、允许用户从差异树中按需选择目标差异项,执行双向结构化复制(第一侧复制到第二侧,或反之)。由于差异节点中已完整保存两侧的节点对象、组件及属性数据,该复制操作是语义级的拷贝,而非文本替换,保证了目标资源的层级和引用完整性。同步完成后,重新执行结构化解析和差异树构建,使用户能够即时验证操作效果,确认差异是否消除或是否引入新问题。这一闭环机制弥补了unity原生面板和版本控制工具“仅展示不操作”或“操作后无反馈”的不足,使开发人员能够高效、准确地完成两个资源对象之间的差异审查与双向同步。