提高Unity3d骨骼动画插件SmoothMoves的加载速度的方法技术

技术编号:11278031 阅读:109 留言:0更新日期:2015-04-09 10:52
本发明专利技术提供了一种提高Unity3d骨骼动画插件SmoothMoves的加载速度的方法,该方法通过将SmoothMoves动画文件挂载的脚本BoneAnimation中的触发帧和动画剪辑数据抽离出去并存入一创建的脚本对象中,使得骨骼动画中触发帧和动画剪辑两者中不再包含任何数据,即骨骼动画中存储的数据量大幅减少。对于同一SmoothMoves动画文件,不必对大量重复的触发帧和动画剪辑数据进行反复的深度复制,只需引用各实例化所创建的脚本对象所共享的同一份数据即可,有效地减少了GC Alloc的次数,同时也减少了内存占用。

【技术实现步骤摘要】
【专利摘要】本专利技术提供了一种,该方法通过将SmoothMoves动画文件挂载的脚本BoneAnimation中的触发帧和动画剪辑数据抽离出去并存入一创建的脚本对象中,使得骨骼动画中触发帧和动画剪辑两者中不再包含任何数据,即骨骼动画中存储的数据量大幅减少。对于同一SmoothMoves动画文件,不必对大量重复的触发帧和动画剪辑数据进行反复的深度复制,只需引用各实例化所创建的脚本对象所共享的同一份数据即可,有效地减少了GC Alloc的次数,同时也减少了内存占用。【专利说明】提高Unity3d骨路动画插件SmoothMoves的加载速度的方法
本专利技术涉及一种动画插件加载方法,特别涉及一种。
技术介绍
Unity3d是由来自美国的Unity Technologies公司开发的在全球占主导地位的一款游戏开发软件。Unity是一种开创性的开发平台,用于创建游戏和交互式3D和2D体验,能够用于三维视频游戏、建筑可视化、实时三维动画等类型互动内容的设计。Unity编辑器运行在 Windows 和 Mac OS X 下,并可发布游戏至 Windows、Mac、Wi1、iPhone、Windowsphone 8和Android众多平台,也可以利用Unity web player插件发布网页游戏,支持Mac和Windows的网页浏览。正因如此,在智能设备迅猛发展的今天,Unity成功占据了移动游戏开发引擎的半壁江山。在世界范围内,Unity占据全功能游戏引擎市场45%的份额,大约三倍于其直接竞争对手。 Unity的最初定位为3d游戏引擎,为3d制作整个流水线提供了全面的支持,同时Unity也支持第三方工具插件,并可以在其官方的Asset Store (资源商店)中发布和购买,这也是其迅速发展的重要原因。Unity在游戏制作流程及跨平台方面的良好表现,使得众多的2d游戏开发也选择Unity,同时辅助使用一些第三方的2d插件,在这些工具插件中,SmoothMoves作为一款2d骨骼动画插件得到了较多关注。 SmoothMoves依托于Unity,提供了类似于flash操作方式的2d骨骼动画解决方案,大大减少2d游戏的资源占用。但是SmoothMoves动画文件加载时速度较慢,在加载一个含有50个bone,10个clip的动画文件时,大概需要I秒,如此在加载一个有20个类似动画文件的场景时便需要20秒左右,即便是将同一个动画文件实例化20份也要耗费同样的时长,如此长时间的加载将大大降低游戏者的使用体验。在通过Unity编辑器中的Profiler (性能分析工具)分析加载过程后,可以发现在动画文件加载过程中产生的大量的GC Alloc (会导致垃圾回收的内存分配),每个类似前述的动画产生大约IMB的GCAlloc0正是如此大量的GC Alloc使得加载速度非常之慢。 现有的SmoothMoves动画运行时需要依靠脚本BoneAnimat1n(骨骼动画)来控制,其包含的所有的动画信息,如关键帧、骨骼贴图等等。在加载动画时,需要对BoneAnimat1n进行实例化,而在实例化SmoothMoves动画时会对这些动画信息进行复制,即将在内存中开放一个空间来存储动画对象,因而复制动画文件时会触发GC Alloc。而在实例化多个动画文件时,将反复复制这些动画信息,如此反复触发GC Alloc,将导致产生大量的垃圾内存分配,占用了更多的内存空间,拖慢动画加载速度。
技术实现思路
本专利技术的目的在于提供一种,以解决现有的Unity3d骨骼动画插件SmoothMoves加载速度较慢的问题。 本专利技术的第二目的在于提供一种,以解决骨骼动画实例化过程中复制的数据量较大的问题。 为实现上述目的,本专利技术提供了一种,包括:51:从动画文件的骨骼动画中抽离出触发帧和动画剪辑,并分别形成触发帧列表和动画剪辑列表;52:每次实例化一个骨骼动画时,通过添加引用的方式对所述触发帧列表和动画剪辑列表进行单独加载。 较佳地,所述步骤SI具体包括以下步骤:511:创建骨骼动画的脚本对象;512:在所述脚本对象中创建触发帧列表及动画剪辑列表;513:将原有的骨骼动画的触发帧拷贝到所述触发帧列表中,并清空原有骨骼动画的触发帧;S14:将原有的骨骼动画的动画剪辑拷贝到所述动画剪辑列表中,并清空原有骨骼动画的动画剪辑。 较佳地,所述步骤S13还包括对骨骼动画的触发帧进行优化,所述对骨骼动画的触发帧进行优化具体包括以下步骤:5131:建立触发帧骨骼集合,所述触发帧骨骼集合包含属性不同的若干触发帧骨骼;5132:建立骨骼动画触发帧数组,所述骨骼动画触发帧数组包括若干触发帧,每个触发帧包括若干触发帧骨骼;5133:对每个触发帧均建立一对应的索引表,该索引表中存储其对应的触发帧中的所有触发帧骨骼在所述触发帧骨骼集合的索引,在对每个触发帧建立对应的索引表后,清除该触发帧的全部触发帧骨骼;5134:将骨骼动画的各触发帧的索引表拷贝到所述触发帧列表中各触发帧对应位置处,并清空所述触发帧列表中的触发帧。 较佳地,所述步骤S2具体包括:521:预先加载包含所述触发帧列表及动画剪辑列表的脚本对象;522:实例化所述骨骼动画并为其触发帧和动画剪辑添加引用。 较佳地,所述步骤S22具体包括:将骨骼动画中的触发帧指向脚本对象中的触发帧列表;将骨骼动画中的动画剪辑指向脚本对象中的动画剪辑列表。 较佳地,所述步骤Sll中的所述脚本对象为一待填充数据的空表。 本专利技术所提供的方法通过将SmoothMoves动画文件挂载的脚本BoneAnimat1n(骨骼动画)中的触发帧和动画剪辑数据抽离出去并存入一脚本对象中,使得骨骼动画中触发帧和动画剪辑两者中不再包含任何数据,即骨骼动画中存储的数据量大幅减少。在动画实例化时,在对骨骼动画进行深度复制时,即不必再调取骨骼动画中的触发帧和动画剪辑数据,而是通过引用脚本对象的方式实现对原来的触发帧和动画剪辑数据的加载。进一步地通过将原本存储于触发帧中的各个触发帧骨骼数据存储在一建立的属性无重合的触发帧骨骼集合中,而触发帧中只存储其原来所存储的触发帧骨骼的索引表,再将各触发帧对应的索引表存储在脚本对象的触发帧列表中,这种方式进一步地减少了在骨骼动画进行深度复制时对大量重复的数据的复制量。 采用本专利技术方法后,对于同一 SmoothMoves动画文件,不必对大量重复的触发帧和动画剪辑数据进行反复的深度复制,只需引用各实例化脚本对象所共享的同一份数据即可,有效地减少了 GC Alloc的次数,同时也减少了内存占用。 【专利附图】【附图说明】 图1为本专利技术方法优选实施例的整体步骤流程图;图2为本专利技术方法优选实施例的步骤SI的具体步骤流程图;图3为本专利技术方法优选实施例的步骤SI的具体执行过程流程图;图4为本专利技术方法优选实施例的步骤S2的具体步骤流程图;图5为本专利技术方法一实施例的优化前及优化后数据量对比示意图;图6为优选实施例的对骨骼动画的触发帧进行优化的具体步骤流程图。 【具体实施方式】 为更好地说明本专利技术,兹以若干优选实施例,并配合附图对本专利技术作详细说明,具体如下:如图1所示,本专利技术方法包括两步,具体如下:步骤S1本文档来自技高网
...

【技术保护点】
一种提高Unity3d骨骼动画插件SmoothMoves的加载速度的方法,其特征在于,包括:S1:从动画文件的骨骼动画中抽离出触发帧和动画剪辑,并分别形成触发帧列表和动画剪辑列表;S2:每次实例化一个骨骼动画时,先对所述触发帧列表和动画剪辑列表进行单独加载,再为骨骼动画添加相应引用。

【技术特征摘要】

【专利技术属性】
技术研发人员:曹青
申请(专利权)人:上海恺英网络科技有限公司
类型:发明
国别省市:上海;31

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1