发明内容
本发明提供一种UnityNGUI控件锚点更新模式优化方法及装置,对所有UI prefab进行扫描,统计所有锚点模式为每帧更新的UI控件,并自动批量修改相应的锚点更新模式。
本发明的技术方案第一方面为一种UnityNGUI控件锚点更新模式优化方法,所述方法包括以下步骤:
A、遍历unityNGUI控件,查找Prefab类型的资源并将其进行实例化;
B、获取各实例化对象的锚点更新模式,筛选锚点更新模式为OnUpdate的Prefab资源,记录其文件路径;
C、进一步筛选锚点更新模式可修改的Prefab资源;
D、将最终筛选出的Prefab资源的锚点更新模式修改为OnEnable模式。
进一步,所述步骤A包括:定位unityNGUI控件的路径,获取该路径下的所有Prefab类型资源的文件路径;根据获取的Prefab资源的文件路径,使用AssetDatabase加载所有的Prefab资源并实例化。
进一步,所述步骤B包括:获取所有实例化对象的UIRect组件对象,得到UIRect集合;逐个扫描UIRect集合的每个UIRect组件对象,获取并判断其锚点更新模式是否为OnUpdate模式,若为OnUpdate模式,则记录该UIRect组件对象。
进一步,所述步骤C包括:获取记录的各UIRect组件对象的锚点更新模式,若其预设模式为OnUpdate且不允许修改,则从记录中删除该UIRect组件对象。
本发明的技术方案第二方面为一种UnityNGUI控件锚点更新模式优化装置,该装置包括:实例化模块,用于遍历unityNGUI控件,查找Prefab类型的资源并将其进行实例化;第一筛选模块,用于获取各实例化对象的锚点更新模式,筛选锚点更新模式为OnUpdate的Prefab资源,记录其文件路径;第二筛选模块,用于进一步筛选锚点更新模式可修改的Prefab资源;设置模块,用于将最终筛选出的Prefab资源的锚点更新模式修改为OnEnable模式。
进一步,所述实例化模块包括:路径获取模块,用于定位unityNGUI控件的路径,获取该路径下的所有Prefab类型资源的文件路径;资源实例化模块,用于根据获取的Prefab资源的文件路径,使用AssetDatabase加载所有的Prefab资源并实例化。
进一步,所述第一筛选模块包括:筛选组件模块,用于获取所有实例化对象的UIRect组件对象,得到UIRect集合;锚点更新模式判断及记录模块,用于逐个扫描UIRect集合的每个UIRect组件对象,获取并判断其锚点更新模式是否为OnUpdate模式,若为OnUpdate模式,则记录该UIRect组件对象。
进一步,所述第二筛选模块包括:剔除模块,用于获取记录的各UIRect组件对象的锚点更新模式,若其预设模式为OnUpdate且不允许修改,则从记录中删除该UIRect组件对象。
本发明的技术方案第三方面为一种计算机可读存储介质,其上储存有计算机程序,所述计算机程序被处理器执行时实现如上述第一方面所述的方法。
本发明的有益效果为:
本发明通过扫描NGUI中UI的锚点更新模式,对非必须使用OnUpdate的锚点进行修改使其锚点更新模式为OnEnable,可以减少UIRect.Update函数的开销,提升游戏fps,提升了游戏开发人员的开发效率。
具体实施方式
以下将结合实施例和附图对本发明的构思、具体结构及产生的技术效果进行清楚、完整的描述,以充分地理解本发明的目的、方案和效果。
需要说明的是,如无特殊说明,在本公开中所使用的单数形式的“一种”、“所述”和“该”旨在包括多数形式,除非上下文清楚地表示其他含义。此外,除非另有定义,本文所使用的所有的技术和科学术语与本技术领域的技术人员通常理解的含义相同。本文说明书中所使用的术语只是为了描述具体的实施例,而不是为了限制本发明。本文所使用的术语“和/或”包括一个或多个相关的所列项目的任意的组合。
应当理解,尽管在本公开可能采用术语第一、第二、第三等来描述各种模块,但这些模块不应限于这些术语。这些术语仅用来将同一类型的模块彼此区分开。例如,在不脱离本公开范围的情况下,第一模块也可以被称为第二模块,类似地,第二模块也可以被称为第一模块。本文所提供的任何以及所有实例或示例性语言(“例如”、“如”等)的使用仅意图更好地说明本发明的实施例,并且除非另外要求,否则不会对本发明的范围施加限制。
本发明的基本思想是:利用AssetDatabase我们可以将Assets下目录下所有的Perfab资源进行加载与实例化,实例化后通过对目标组件UIRect的锚点模式进行统计与修改,以达到优化的目的。
参考图1,一种UnityNGUI控件锚点更新模式优化方法,包括以下步骤:
A、遍历unityNGUI控件,查找Prefab类型的资源并将其进行实例化;
B、获取各实例化对象的锚点更新模式,筛选锚点更新模式为OnUpdate的Prefab资源,记录其文件路径;
C、进一步筛选锚点更新模式可修改的Prefab资源;
D、将最终筛选出的Prefab资源的锚点更新模式修改为OnEnable模式。
进一步,所述步骤A包括:定位unityNGUI控件的路径,获取该路径下的所有Prefab类型资源的文件路径;根据获取的Prefab资源的文件路径,使用AssetDatabase加载所有的Prefab资源并实例化。
进一步,所述步骤B包括:获取所有实例化对象的UIRect组件对象,得到UIRect集合;逐个扫描UIRect集合的每个UIRect组件对象,获取并判断其锚点更新模式是否为OnUpdate模式,若为OnUpdate模式,则记录该UIRect组件对象。
进一步,所述步骤C包括:获取记录的各UIRect组件对象的锚点更新模式,若其预设模式为OnUpdate且不允许修改,则从记录中删除该UIRect组件对象。
参考图2,一种UnityNGUI控件锚点更新模式优化装置,该装置包括:实例化模块1,用于遍历unityNGUI控件,查找Prefab类型的资源并将其进行实例化;第一筛选模块2,用于获取各实例化对象的锚点更新模式,筛选锚点更新模式为OnUpdate的Prefab资源,记录其文件路径;第二筛选模块3,用于进一步筛选锚点更新模式可修改的Prefab资源;设置模块4,用于将最终筛选出的Prefab资源的锚点更新模式修改为OnEnable模式。
进一步,所述实例化模块1包括:路径获取模块11,用于定位unityNGUI控件的路径,获取该路径下的所有Prefab类型资源的文件路径;资源实例化模块12,用于根据获取的Prefab资源的文件路径,使用AssetDatabase加载所有的Prefab资源并实例化。
进一步,所述第一筛选模块2包括:筛选组件模块21,用于获取所有实例化对象的UIRect组件对象,得到UIRect集合;锚点更新模式判断及记录模块22,用于逐个扫描UIRect集合的每个UIRect组件对象,获取并判断其锚点更新模式是否为OnUpdate模式,若为OnUpdate模式,则记录该UIRect组件对象。
进一步,所述第二筛选模块3包括:剔除模块31,用于获取记录的各UIRect组件对象的锚点更新模式,若其预设模式为OnUpdate且不允许修改,则从记录中删除该UIRect组件对象。
具体的实施说明如下:
第一步、通过给定的UI路径文件夹,获取该文件夹下所有UIPrefab的文件路径。
第二步、根据上面获取到的文件路径,通过AssetDatabase.LoadAssetAtPath来加载UIPerfab文件,并将其实例化。
第三步、通过上面得到的实例化对象,获取其所有的UIRect组件对象,代码如:UIRect[]uiRects=obj.GetComponentsInChildren<UIRect>(true)。
第四步、对上面获取到的uiRects进行逐个的锚点判断,如果锚点更新模式为OnUpdate模式则记录这个组件,代码如:
if(uiRect.updateAnchors==UIRect.AnchorUpdate.OnUpdate&&
(uiRect.leftAnchor.target!=null||
uiRect.rightAnchor.target!=null||
uiRect.topAnchor.target!=null||
uiRect.bottomAnchor.target!=null)){//记录组件}
修改工具的实现:
前三步与上述方式相同。
第四步、对上面获取到的uiRects进行逐个的锚点判断,如果锚点更新模式为OnUpdate模式则修改为OnEnable模式,代码如:
然后保存此次修改,代码为:
EditorUtility.SetDirty(obj);
AssetDatabase.SaveAssets()。
应当认识到,本发明的实施例可以由计算机硬件、硬件和软件的组合、或者通过存储在非暂时性计算机可读存储器中的计算机指令来实现或实施。所述方法可以使用标准编程技术-包括配置有计算机程序的非暂时性计算机可读存储介质在计算机程序中实现,其中如此配置的存储介质使得计算机以特定和预定义的方式操作——根据在具体实施例中描述的方法和附图。每个程序可以以高级过程或面向对象的编程语言来实现以与计算机系统通信。然而,若需要,该程序可以以汇编或机器语言实现。在任何情况下,该语言可以是编译或解释的语言。此外,为此目的该程序能够在编程的专用集成电路上运行。
此外,可按任何合适的顺序来执行本文描述的过程的操作,除非本文另外指示或以其他方式明显地与上下文矛盾。本文描述的过程(或变型和/或其组合)可在配置有可执行指令的一个或多个计算机系统的控制下执行,并且可作为共同地在一个或多个处理器上执行的代码(例如,可执行指令、一个或多个计算机程序或一个或多个应用)、由硬件或其组合来实现。所述计算机程序包括可由一个或多个处理器执行的多个指令。
进一步,所述方法可以在可操作地连接至合适的任何类型的计算平台中实现,包括但不限于个人电脑、迷你计算机、主框架、工作站、网络或分布式计算环境、单独的或集成的计算机平台、或者与带电粒子工具或其它成像装置通信等等。本发明的各方面可以以存储在非暂时性存储介质或设备上的机器可读代码来实现,无论是可移动的还是集成至计算平台,如硬盘、光学读取和/或写入存储介质、RAM、ROM等,使得其可由可编程计算机读取,当存储介质或设备由计算机读取时可用于配置和操作计算机以执行在此所描述的过程。此外,机器可读代码,或其部分可以通过有线或无线网络传输。当此类媒体包括结合微处理器或其他数据处理器实现上文所述步骤的指令或程序时,本文所述的发明包括这些和其他不同类型的非暂时性计算机可读存储介质。当根据本发明所述的UnityNGUI控件锚点更新模式优化方法和技术编程时,本发明还包括计算机本身。
计算机程序能够应用于输入数据以执行本文所述的功能,从而转换输入数据以生成存储至非易失性存储器的输出数据。输出信息还可以应用于一个或多个输出设备如显示器。在本发明优选的实施例中,转换的数据表示物理和有形的对象,包括显示器上产生的物理和有形对象的特定视觉描绘。
以上所述,只是本发明的较佳实施例而已,本发明并不局限于上述实施方式,只要其以相同的手段达到本发明的技术效果,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。在本发明的保护范围内其技术方案和/或实施方式可以有各种不同的修改和变化。