CN111760293B - 时间轴工具的资源动态加载方法及装置、电子设备 - Google Patents
时间轴工具的资源动态加载方法及装置、电子设备 Download PDFInfo
- Publication number
- CN111760293B CN111760293B CN202010649321.XA CN202010649321A CN111760293B CN 111760293 B CN111760293 B CN 111760293B CN 202010649321 A CN202010649321 A CN 202010649321A CN 111760293 B CN111760293 B CN 111760293B
- Authority
- CN
- China
- Prior art keywords
- resource
- binding
- information
- resources
- animation
- 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
Links
- 238000011068 loading method Methods 0.000 title claims abstract description 56
- 238000000034 method Methods 0.000 claims abstract description 45
- 230000003068 static effect Effects 0.000 claims description 58
- 238000003860 storage Methods 0.000 claims description 16
- 230000008569 process Effects 0.000 claims description 14
- 238000004590 computer program Methods 0.000 claims description 4
- 238000009417 prefabrication Methods 0.000 claims description 4
- 238000010586 diagram Methods 0.000 description 17
- 230000006870 function Effects 0.000 description 13
- 230000000694 effects Effects 0.000 description 6
- 238000012545 processing Methods 0.000 description 6
- 238000004519 manufacturing process Methods 0.000 description 4
- 230000008901 benefit Effects 0.000 description 3
- 230000006399 behavior Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000004140 cleaning Methods 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 239000011230 binding agent Substances 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000005538 encapsulation Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000014509 gene expression Effects 0.000 description 1
- 238000002372 labelling Methods 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
- 239000002245 particle Substances 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
Classifications
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F13/00—Video games, i.e. games using an electronically generated display having two or more dimensions
- A63F13/60—Generating or modifying game content before or while executing the game program, e.g. authoring tools specially adapted for game development or game-integrated level editor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Abstract
本申请提供一种时间轴工具的资源动态加载方法及装置、电子设备,该方法包括:在运行时间轴工具时,反序列化时间轴预制体中保存的绑定信息;根据绑定信息指示的绑定方式和资源信息,执行不同的资源加载流程;在获取到动画资源之后,根据绑定信息指示的序列化方式和轨道信息,调用相应的接口恢复时间轴预制体中轨道与资源的绑定。本申请实施例提供的技术方案,资源在需要查看时再执行加载流程,使得时间轴预制体本身容量大大下降,避免了不同时间轴之间资源的冗余,也可以随时替换动态绑定的对象。
Description
技术领域
本申请涉及图像处理技术领域,特别涉及一种时间轴工具的资源动态加载方法及装置、电子设备、计算机及可读存储介质。
背景技术
Timeline是Unity引擎中提供的电影序列工具,也称“时间轴工具”。在游戏开发中,常常用于制作一些实时过场动画,或者需要动画、音效、特效等配合时的复杂表现。
Unity Timeline绑定指的是如何指定Timeline在运行时所控制的资源的问题。这里的资源可能是一个Unity Prefab(预制体),也可能是一个UnityGameObject(游戏物体),也可能是动画片段、音频等等游戏资产。具体的来说,Timeline制作完成之后是一组轨道的集合,每一条轨道控制了某个资源某个维度上的变化,因此如何绑定轨道和资源的对应关系就是使用UnityTimeline时经常遇到的问题。
Unity提供了基础的静态引用的方案,不支持动态替换。即通过Unity内置的资源依赖和序列化功能来保持轨道和资源之间的引用关系。
现代游戏中大量使用Timeline作为游戏的转场,而往往此时角色、场景的状态是不确定的。例如角色的外形已经改变,场景物体已被破坏等等,因此提前编辑好的Timeline需要动态绑定此时的资源进行表现。静态引用无法满足动态替换的需求。
发明内容
本申请实施例提供了时间轴工具的资源动态加载方法,用以满足资源动态替换的需求。
本申请实施例提供了一种时间轴工具的资源动态加载方法,包括:
在运行时间轴工具时,反序列化时间轴预制体中保存的绑定信息;
根据所述绑定信息指示的绑定方式和资源信息,执行不同的资源加载流程;
在获取到动画资源之后,根据所述绑定信息指示的序列化方式和轨道信息,调用相应的接口恢复所述时间轴预制体中轨道与资源的绑定。
在一实施例中,在所述反序列化时间预制体中保存的绑定信息之前,所述方法还包括:
将所述时间轴预制体中所用的动画资源分别根据绑定方式和序列化方式进行分类,得到每种动画资源的类型;
对于不同类型的动画资源,收集与所述动画资源的类型对应的绑定信息;
对所述绑定信息进行序列化存储,并删除所述时间轴预制体中除自身类型以外的动画资源。
在一实施例中,所述对于不同类型的动画资源收集与所述动画资源的类型对应的绑定信息,包括:
根据所述动画资源的绑定方式和序列化方式,收集与所述绑定方式对应的资源信息以及与所述序列化方式对应的轨道信息。
在一实施例中,所述将所述时间轴预制体中所用的动画资源分别根据绑定方式和序列化方式进行分类,包括:
按照绑定方式,将所述动画资源分为四类:自身类型、静态预制体类型、运行时动态引用类型以及运行时静态引用类型。
按照序列化方式,将所述动画资源分为两类:静态引用类型和动态引用类型。
在一实施例中,所述按照绑定方式,将所述动画资源分为四类:自身类型、静态预制体类型、运行时动态引用类型以及运行时静态引用类型,包括:
收集每个动画资源的预制体信息;所述预制体信息包括最内层预制体节点和最外层预制体节点;
遍历每个引用的动画资源,若所述动画资源的最外层预制体节点是时间轴预制体本身,则将所述动画资源定义为自身类型;
若所述动画资源的最外层预制体节点在配置的静态资源集合中,则将所述动画资源定义为运行时静态引用类型;
若所述动画资源的最内层预制体节点在配置的动态资源集合中,则将所述动画资源定义为运行时动态引用类型。
在一实施例中,所述根据所述绑定信息指示的绑定方式和资源信息,执行不同的资源加载流程,包括:
如果所述绑定方式是静态预制体类型,根据资源信息指示的资源路径加载动画资源;
如果所述绑定方式是运行时动态引用类型,根据所述资源信息指示的动态物体类型去动态物体集合中获取动态资源;
如果所述绑定方式是运行时静态引用类型,根据所述资源信息指示的资源标识符去静态物体集合中获取静态资源。
在一实施例中,所述根据所述绑定信息指示的序列化方式和轨道信息,调用相应的接口恢复所述时间轴预制体中轨道与资源的绑定,包括:
如果所述序列化方式是静态引用类型,根据所述轨道信息指示的轨道名称和轨道标识符,调用相应的接口恢复时间轴预制体中轨道与资源的绑定。
如果所述序列化方式是动态引用类型,根据所述轨道信息指示的查找引用的键,调用相应的接口恢复时间轴预制体中轨道与资源的绑定。
本申请实施例还提供了一种时间轴工具的资源动态加载装置,包括:
获取绑定信息,用于在运行时间轴工具时,反序列化时间轴预制体中保存的绑定信息;
资源查找模块,用于根据所述绑定信息指示的绑定方式和资源信息,执行不同的资源加载流程;
动态绑定模块,用于在获取到动画资源之后,根据所述绑定信息指示的序列化方式和轨道信息,调用相应的接口恢复所述时间轴预制体中轨道与资源的绑定。
本申请实施例还提供了一种电子设备,所述电子设备包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为执行上述时间轴工具的资源动态加载方法。
本申请实施例还提供了一种计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序可由处理器执行以完成上述时间轴工具的资源动态加载方法。
本申请上述实施例提供的技术方案,时间轴预制体中只保存了序列化的绑定信息,资源在需要查看时再执行加载流程,这为资源的预加载和复用提供的可能,使得时间轴预制体本身容量大大下降,避免了不同时间轴之间资源的冗余,可以一键恢复轨道与资源的绑定并预览,方便了美术随时查看制作效果,也可以随时替换动态绑定的对象,检查时间轴工具使用不同资源时的表现力。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例中所需要使用的附图作简单地介绍。
图1为本申请实施例提供的Unity Timeline的主要编辑窗口示意图;
图2为本申请实施例提供的时间轴工具的资源动态加载方法的流程示意图;
图3为本申请另一实施例提供的资源动态加载流程示意图;
图4为本申请实施例提供的方案概述示意图;
图5为图2对应实施例基础上另一实施例提供的时间轴工具的资源动态加载方法的流程示意图;
图6为本申请实施例提供的信息保存流程示意图;
图7为本申请实施例提供的绑定信息的内容示意图;
图8为本申请实施例提供的清理引用后的时间轴预制体的结果示意图;
图9为本申请实施例提供的清理引用后的时间轴轨道界面的结果示意图;
图10为恢复后的时间轴预制体的结果示意图;
图11为恢复后的时间轴轨道的结果示意图;
图12为本申请实施例提供的时间轴工具的动态功能扩展方式示意图;
图13为本申请实施例提供的时间轴工具的资源动态加载装置的框图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。
相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本申请的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
图1为本申请实施例提供的Unity Timeline的主要编辑窗口示意图,如图1所示,区域11为功能区,提供了一些播放,快进、快退等按钮,区域12显示了时间刻度,可以以帧为单位显示,也可以以自然时间显示。区域13显示了轨道类型和轨道绑定的某一个GameObject(游戏物体)上的Component(组件),区域13为轨道对绑定对象的具体控制。
Unity内置了多种轨道类型例如AnimationTrack(动画轨道)、ParticleTrack(粒子特效轨道)、ActivationTrack(物体激活)、AudioTrack(音频轨道)等,也可以由开发者添加自定义的轨道类型。其中,相同类型的轨道,但是由于绑定的游戏物体和具体行为不同,因此并不相同。总结的说,一个Unity Timeline资源由在相同的时间轴上的多个Track(轨道)组成,轨道由轨道类型、轨道控制的游戏物体以及对绑定游戏物体行为的具体控制三部分构成。例如,AnimationTrack就是控制某一个游戏物体,在特定时间播放自身的动画片段,ActivationTrack就是控制某一个游戏物体,在特定时间隐藏或者显示。
Timeline制作完成之后是一组轨道的集合,每一条轨道控制了某个资源某个维度上的变化,因此如何绑定轨道和资源的对应关系就是使用UnityTimeline时经常遇到的问题,涉及到了资源管理,工作流,工具设计等等方面。
现有只做静态引用,不支持动态替换。即通过Unity内置的资源依赖和序列化功能来保持轨道和资源之间的引用关系。静态引用的方案有以下缺点:可能会带来大量的重复劳动和资源,静态引用意味着Timeline和资源只能一一对应,即使只是其中的某一个资源的不同,也意味着要另外制作一个Timeline;无法满足动态替换的需求;资源管理的困难,无法实现绑定资源的预加载以及复用,造成游戏资源的冗余以及加载的缓慢。
为了绑定轨道与资源的引用关系,本申请对比了基于轨道信息的资源替换方案,即通过代码封装Unity的轨道对象,例如AnimationTrack(动画轨道),AudioTrack(音频轨道)等,并为这些轨道对象提供各自的绑定接口。再为每一个时间轴提供一份配置文件,记录了需要做动态绑定的轨道名和封装对象类型,再在运行时由程序根据这些信息做动态绑定。
基于轨道信息的资源替换方案有以下缺点:(1)维护成本高,需要为每一种轨道提供一个封装对象,且需要一直维护。不论是后期增加了一种新的轨道,还是修改了轨道绑定对象的方式,都需要修改代码。(2)对美术制作有很多限制,当Timeline修改后,需要同步更新(轨道名,轨道对象)的配置文件,如果让美术手动更新非常容易出错,即使做到了工具化也有一些潜在问题,例如要求美术不能制作同名轨道等。(3)没有根本解决动态绑定的需求,如果只是将Timeline中部分轨道做成动态绑定,那意味着美术制作完毕后还需要程序员手动标记哪些轨道要做动态绑定,这就失去了Timeline分离职责的优势。且剩下的轨道还是静态绑定,也依旧有资源冗余和加载等问题。但如果要将所有轨道做成动态绑定,程序员工作量又会非常巨大。在实际工作中一条Timeline中十几条轨道非常常见,如果都需要逐一在代码里加载资源,然后传给封装对象非常繁琐。且当美术增删轨道之后,代码也需要更新,人力上几乎无法实现。(4)预览困难:所见即所得是Timeline另一大优势,但是由于该方案在美术增删之后,需要程序员修改一些代码才能预览。无法让美术独立工作,也不能第一时间预览该Timeline应用到其他角色上的效果。
图2是本申请实施例提供的时间轴工具的资源动态加载方法的流程示意图。如图2所示,该方法包括以下步骤S210-步骤S230。
步骤S210:在运行时间轴工具时,反序列化时间轴预制体中保存的绑定信息。
当美术需要预览或者游戏运行时,即要播放时间轴工具时,反序列化之前存储绑定信息。序列化(Serialization)是指将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。
时间轴预制体是指管理GameObject的资源系统。它可以将GameObject连同上面的Component、数据进行存储。并在需要用到时,以自身为模板创建一份GameObject实例。Unity GameObject是Unity引擎中对于运行时角色、属性、场景等一切游戏对象的抽象,它由自身挂载的Component(组件)实现具体的游戏逻辑。绑定信息可以包括绑定方式、资源信息、序列化方式以及轨道信息。
步骤S220:根据所述绑定信息指示的绑定方式和资源信息,执行不同的资源加载流程。
其中,绑定方式可以包括self(自身类型,属于时间轴预制体的一部分)、Prefab(静态预制体类型)、Dynamic(运行时动态引用类型)以及Static(运行时静态引用类型)。
资源信息包括通用信息和特有信息,通用信息包括:Unity Component类型以及Transform信息(例如根节点路径、位置、旋转、缩放、名称等),对于Prefab类型,特有信息包括Prefab的资源路径,InstanceId(实例标识符,用于区分是否引用的是一个实例);对于Dynamic类型,特有信息包括DynamicObjectType(动态物体类型),一个自定义的枚举用于区分当前对象是什么(男主角还是场景中的某个动态物体)。对于Static类型,特有信息包括在场景中查找这个资源的资源ID(标识符)。
图3是本申请一实施例提供的动态时间轴加载流程图。当需要恢复Timeline时,例如游戏实际运行或者美术需要预览修改等。此时便会如图3所示执行加载流程。程序首先根据当前的程序上下文(context)创建动态物体集合(DynamicObjects),例如加载主角模型等动态物体。接着在Timeline预制体上找到绑定信息并遍历其中的数据,根据其中的引用类型(ReferenceType),也就是绑定方式,执行不同的资源加载流程。
在一实施例中,如图3所示,Self类型因为是自身引用,因此不需要额外加载资源,Static类型则要去静态物体集合中根据StaticKey(资源标识符)来在场景中查找静态资源,Dynamic类型则要根据动态DynamicObjectType去动态物体集合(DynamicObjects)查找动态资源,Prefab类型的则根据当前是运行时还是编辑器环境,通过保存的资源路径调用Editor(编辑)或Runtime(运行)接口加载资源。资源获取完之后,就可以通过ObjectReferenceInfo(物体引用组件)来恢复绑定。
步骤S230:在获取到动画资源之后,根据所述绑定信息指示的序列化方式和轨道信息,调用相应的接口恢复所述时间轴预制体中轨道与资源的绑定。
动画资源可以是一个Unity Prefab(预制体),也可能是一个Unity GameObject(游戏物体),也可能是动画片段、音频等资源。
其中,按照序列化方式,资源可以分为GenericBinding(静态引用)和ExposedReference(运行时引用)。对于GenericBinding类型,轨道信息包括:轨道标识,轨道名,对于ExposedReference类型,轨道信息包括UnityEngine.PropertyName(Unity提供的用于运行时查找引用的键)。根据绑定信息指示的资源是GenericBinding类型,还是ExposedReference类型,调用不同的接口恢复绑定。如果是GenericBinding类型,可以通过Unity提供的PlayableDirector.SetGenericBinding接口绑定,进行轨道和资源的绑定。如果是ExposedReference类型,可以通过Unity提供的PlayableDirectorSetReferenceValue接口进行轨道和资源的绑定。
本申请实施例解决了Timeline动态绑定的需求,如图4所示,可以取名为TimelineBinder(动态时间轴)。主要分为保存、加载、拓展三个方面。即在加载资源之前还包括保存步骤。拓展是指扩展更多定制化的需求。保存的过程包括对Timeline中引用的资源进行分类,收集绑定信息,将收集的信息序列化存储并解除静态引用,具体保存过程参见图5对应实施例。
如图5所示,在上述步骤S210之前,本申请实施例提供的方法还包括步骤S510-步骤S530。
步骤S510:将所述时间轴预制体中所用的动画资源分别根据绑定方式和序列化方式进行分类,得到每种动画资源的类型。
在一实施例中,按照绑定方式,动画资源可以分为四类:self类型、prefab类型、Dynamic类型以及Static类型。
按照序列化方式,动画资源可以分为两类:GenericBinding,ExposedReference。可以分别为这两类封装Unity的API(应用程序接口),提供绑定和收集信息的接口。
Unity在导入资源时会为资源生成全局唯一的GUID(全局唯一标识符),如果使用GUID进行索引,则是属于GenericBinding,一般在Timeline中用于引用AssetDatabase(资源数据库)内的数据。但是对于游戏运行时的游戏对象,并没有对应的GUID,因此Unity提供了一个泛型对象ExposedReference来进行引用。
对于GenericBinding类型的资源可以通过Unity提供的PlayableDirector类中的GetGenericBinding接口获取。而ExposedReference类型的资源Unity并无API可用,此时可以通过反序列化Timeline资源的方式获取。即创建SerializedObject对象,再逐一查找属性,最终可以在m_ExposedReferences.m_References下找到引用的资源数组。
在判断资源的绑定方式时,可以采用以下方式:收集每个动画资源的prefab信息(预制体信息);prefab信息包括Nearest(最内层prefab节点)和Outermost(最外层prefab节点)。因为Unity中的物体是通过树状结构组织的,此处的节点指的就是树状结构中的位置层级。例如Outermost就是指从当节点出发向上查找直至根节点,再无Prefab连接关系。
可以提前定义静态资源集合和动态资源集合。例如游戏场景内的静态物体一般即可定义为静态资源,例如场景内的相机、场景某个物体等。例如游戏内和逻辑玩法强相关的资源一般即可定义为动态资源,例如主角,或者会随着玩法变化的物体。
遍历每个引用的动画资源,若所述动画资源的Outermost是Timeline所属的Prefab本身时,即可以定义该资源类型为Self类型;若所述动画资源的Outermost在配置的静态资源集合中,则将所述动画资源定义为Static类型;若所述动画资源的Nearest在配置的动态资源集合中,则将所述动画资源定义为Dynamic类型;其余情况下都属于Prefab(静态Prefab)类型。
步骤S520:对于不同类型的动画资源,收集与所述动画资源的类型对应的绑定信息。
在一实施例中,根据动画资源的绑定方式和序列化方式,可以收集与所述绑定方式对应的资源信息以及与所述序列化方式对应的轨道信息。
如图6所示,遍历Timelinede资源,获取资源对应的prefab信息,根据prefab信息可以判断出是Self类型、Static类型、Dynamic类型还是Prefab类型。按照绑定方式的分类,对于Prefab类型,需要保存Prefab的资源路径,InstanceId(实例标识,用于区分是否引用的是一个实例);对于Dynamic类型,需要保存DynamicObjectType,一个自定义的枚举用于区分当前对象是什么(男主角还是场景中的某个动态物体)。对于Static类型,需要保存用于在场景中查找这个资源的Id。之后,还会收集通用信息,通用的有UnityComponent类型以及Transform信息(例如根节点路径、位置、旋转、缩放、名称等)。
对于序列化方式的分类,会收集如下轨道信息:GenericBinding需要收集轨道Id,轨道名,对于ExposedReference需要收集UnityEngine.PropertyName(Unity提供的用于运行时查找引用的键)。
对于不同类型的资源,需要收集不同的信息才能做到动态加载,绑定信息的数据结果可以如图7所示定义。Timeline预制体持有一份TimelineBindInfo类的实例(classinstance),其中按照资源序列化的方式,分为两个列表,即TrackInfos和ExposedReferences。TrackInfos包含所有GenericBinding类型的资源,定义了名为TrackInfo的结构体。其中有Timeline的TrackIndex(轨道索引)和TrackName(轨道名),还有类型为ObjectReferenceInfo的绑定信息。ExposedReferences包含所有ExposedReference类型的资源,定义了名为ExposedInfo的结构体,包含Unity用于运行时查找引用的UnityEngine.PropertyName,以及类型为ObjectReferenceInfo的绑定信息。这种数据的组织结构非常适用于UnityTimeline的资源引用方式,即一个轨道可以对应多个资源,一个资源也可以适用于多个轨道。
ObjectReferenceInfo即为保存引用关系的结构体,其中有一些通用信息UnityComponent类型以及Transform信息(例如根节点路径、位置、旋转、缩放、名称等),还有引用类型(ReferenceType)。也有一些特有信息,对于Prefab类型,需要保存Prefab的资源路径,InstanceId(用于区分是否引用的是一个实例);对于Dynamic类型,需要保存DynamicObjectType,一个自定义的枚举用于区分当前对象是什么(男主角还是场景中的某个动态物体)。对于Static类型,需要保存用于在场景中查找这个资源的Id。
步骤S530:对所述绑定信息进行序列化存储,并删除所述时间轴预制体中除自身类型以外的动画资源。
在点击保存按钮后,程序自动将上述收集的绑定信息序列化存储到本地。参见上文,序列化(Serialization)是指将对象的状态信息转换为可以存储或传输的形式的过程。序列化使其他代码可以查看或修改,那些不序列化便无法访问的对象实例数据。例如json,xml都是常见的序列化方式。
本申请将收集来的信息通过Unity提供的ScriptableObject进行序列化存储。ScriptableObject是Unity提供的一个存储数据对象的解决方案。使用者只需要将自己数据类继承ScriptableObject类,就可以使用Unity内置的序列化和反序列化功能,并可以将数据作为游戏内的资源保存。
此方法有三点优点,首先将数据当作资源看待,可以用统一的资源管理模块管理;其次Unity为其提供了方便的预览界面(Inspector),方便问题的追查;最后性能可以得到保证。
在信息收集完之后,需要对Timeline预制体解除对资源的静态引用。对于所有Self类型的资源不需要做处理,因为该资源为Timeline预制体的一部分,对于Prefab,Static,Dynamic的资源直接从场景内删除即可,最后应用Unity的接口保存Timeline预制体即可。此时的Timeline预制体不静态引用和依赖外部资源,只有一份序列化好的绑定信息。
如图8所示,清理后的Timeline预制体只引用了必要的TimelineAsset(Timeline轨道资源)和TimelineBindInfo(序列化后的绑定信息)。如图9所示,清理后的Timeline轨道里的外部资源引用都已清除(None)。
在执行步骤S210-S230的加载流程后,如图10所示,恢复的Timeline预制体、场景中加载了很多资源,并且如图11所示Timeline轨道也已经恢复绑定。此时如果是编辑器环境(Editor)下,美术则可以立即开始预览和制作,如果是运行时环境(Runtime)下,也可以直接调用UnityAPI播放轨道。
如图12所示,本申请实施例还提供了基于接口的拓展方式,当需要根据特殊的业务场景拓展功能时,程序员只要实现四个类即可完成。分别是继承自BaseBindMaker的类,用于编辑器界面的绘制;继承自BaseEditorData的类,提供Editor资源加载保存的路径配置等;继承自BaseEditorBindImpl的类,用于编辑器环境下(Editor)的加载;继承自BaseRuntimeBindImpl的类,用于运行时环境(Runtime)下的加载。
在实现了基础的界面功能后,当用户需要扩展编辑器界面时,可以根据当前的业务场景实现一个继承自BaseBindMaker的类,扩展其中的抽象函数,例如OnCreateBinder、OnCreateMainObj等,自定义GUI界面,以及响应用户操作的事件等等。
因为项目的不同情况,资源加载保存的路径需要进行配置,此时用户可以根据项目状况实现一个继承自BaseEditorData的类,并重写其中的函数,例如GetTimelinePath即获取Timeline资源保存的路径,GetAssetPath即获取配置文件保存的目录等。
因为在编辑器和运行时环境下,资源有不同的加载方式,且往往还需要做一些特殊处理,例如做资源装配、大小位置调整等。因此本申请实施例区分了编辑器环境下和运行时环境下的加载。用户可以需要扩展BaseEditorBindImpl类,来实现编辑器环境下的自定义加载,例如PrepareDynamicObjects即如何准备动态资源集合,OnBeforeLoad即资源加载前的回调等。用户也需要扩展BaseRuntimeBindImpl类,来实现运行时环境下的自定义加载,一样也需要实现PrepareDynamicObjects等等方法来进行拓展。
本发明实施例提供的技术方案通过程序自动的进行资源分类、收集信息、序列化存储并解除引用、一键恢复,实现了Timeline资源的动态绑定需求。本申请上述实施例提供的技术方案,提出了绑定方式和序列化方式的两种分类方法,不再使用传统的根据轨道信息进行分类的方法,不再对美术制作有任何限制,程序员不需要知道美术对Timeline做了哪些修改。程序一键收集信息,不需要人力对于Timeline制作之外有其他处理,例如打标签、填写配置文件等,节约了人力,避免了人为出错的可能。对于Timeline解除所有静态引用,使得Timeline预制体本身容量大大下降,避免了Timeline之间资源的冗余。所有的资源都是在需要查看时再做加载,这为资源的预加载、复用提供了可能。可以一键恢复绑定并预览,方便了美术随时查看制作效果,也可以随时替换动态绑定的对象,检查Timeline使用不同资源时的表现力。
下述为本申请装置实施例,可以用于执行本申请上述时间轴工具的资源动态加载方法实施例。对于本申请装置实施例中未披露的细节,请参照本申请方法实施例。
图13为本申请一实施例示出的时间轴工具的资源动态加载装置的框图。如图13所示,该装置包括:获取绑定信息1310、资源查找模块1320以及动态绑定模块1330。
获取绑定信息1310,用于在运行时间轴工具时,反序列化时间轴预制体中保存的绑定信息。
资源查找模块1320,用于根据所述绑定信息指示的绑定方式和资源信息,执行不同的资源加载流程。
动态绑定模块1330,用于在获取到动画资源之后,根据所述绑定信息指示的序列化方式和轨道信息,调用相应的接口恢复所述时间轴预制体中轨道与资源的绑定。
上述装置中各个模块的功能和作用的实现过程具体详见上述时间轴工具的资源动态加载方法中对应步骤的实现过程,在此不再赘述。
本申请实施例还提供了一种电子设备,所述电子设备包括:处理器;用于存储处理器可执行指令的存储器;其中,所述处理器被配置为执行上述时间轴工具的资源动态加载方法。该电子设备可以是智能手机、平板电脑、笔记本电脑、台式电脑或服务器。
其中,处理器可以是一种集成电路芯片,具有信号处理能力。上述处理器可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(NetworkProcessor,简称NP)等;还可以是数字信号处理器(DSP)、专用集成电路(ASIC)、现成可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。其可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
存储器可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(Static Random Access Memory,简称SRAM),电可擦除可编程只读存储器(Electrically Erasable Programmable Read-Only Memory,简称EEPROM),可擦除可编程只读存储器(Erasable Programmable Read Only Memory,简称EPROM),可编程只读存储器(Programmable Red-Only Memory,简称PROM),只读存储器(Read-Only Memory,简称ROM),磁存储器,快闪存储器,磁盘或光盘。
本申请实施例还提供了一种计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序可由处理器执行以完成上述时间轴工具的资源动态加载方法。
在本申请所提供的几个实施例中,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本申请的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
另外,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
Claims (9)
1.一种时间轴工具的资源动态加载方法,其特征在于,包括:
在运行时间轴工具时,反序列化时间轴预制体中保存的绑定信息;
根据所述绑定信息指示的绑定方式和资源信息,执行不同的资源加载流程;
在获取到动画资源之后,根据所述绑定信息指示的序列化方式和轨道信息,调用相应的接口恢复所述时间轴预制体中轨道与资源的绑定;
所述根据所述绑定信息指示的绑定方式和资源信息,执行不同的资源加载流程,包括:
如果所述绑定方式是静态预制体类型,根据资源信息指示的资源路径加载动画资源;
如果所述绑定方式是运行时动态引用类型,根据所述资源信息指示的动态物体类型去动态物体集合中获取动态资源;
如果所述绑定方式是运行时静态引用类型,根据所述资源信息指示的资源标识符去静态物体集合中获取静态资源。
2.根据权利要求1所述的方法,其特征在于,在所述反序列化时间预制体中保存的绑定信息之前,所述方法还包括:
将所述时间轴预制体中所用的动画资源分别根据绑定方式和序列化方式进行分类,得到每种动画资源的类型;
对于不同类型的动画资源,收集与所述动画资源的类型对应的绑定信息;
对所述绑定信息进行序列化存储,并删除所述时间轴预制体中除自身类型以外的动画资源。
3.根据权利要求2所述的方法,其特征在于,所述对于不同类型的动画资源收集与所述动画资源的类型对应的绑定信息,包括:
根据所述动画资源的绑定方式和序列化方式,收集与所述绑定方式对应的资源信息以及与所述序列化方式对应的轨道信息。
4.根据权利要求2所述的方法,其特征在于,所述将所述时间轴预制体中所用的动画资源分别根据绑定方式和序列化方式进行分类,包括:
按照绑定方式,将所述动画资源分为四类:自身类型、静态预制体类型、运行时动态引用类型以及运行时静态引用类型;
按照序列化方式,将所述动画资源分为两类:静态引用类型和动态引用类型。
5.根据权利要求4所述的方法,其特征在于,所述按照绑定方式,将所述动画资源分为四类:自身类型、静态预制体类型、运行时动态引用类型以及运行时静态引用类型,包括:
收集每个动画资源的预制体信息;所述预制体信息包括最内层预制体节点和最外层预制体节点;
遍历每个引用的动画资源,若所述动画资源的最外层预制体节点是时间轴预制体本身,则将所述动画资源定义为自身类型;
若所述动画资源的最外层预制体节点在配置的静态资源集合中,则将所述动画资源定义为运行时静态引用类型;
若所述动画资源的最内层预制体节点在配置的动态资源集合中,则将所述动画资源定义为运行时动态引用类型。
6.根据权利要求1所述的方法,其特征在于,所述根据所述绑定信息指示的序列化方式和轨道信息,调用相应的接口恢复所述时间轴预制体中轨道与资源的绑定,包括:
如果所述序列化方式是静态引用类型,根据所述轨道信息指示的轨道名称和轨道标识符,调用相应的接口恢复时间轴预制体中轨道与资源的绑定;
如果所述序列化方式是动态引用类型,根据所述轨道信息指示的查找引用的键,调用相应的接口恢复时间轴预制体中轨道与资源的绑定。
7.一种时间轴工具的资源动态加载装置,其特征在于,包括:
获取绑定信息,用于在运行时间轴工具时,反序列化时间轴预制体中保存的绑定信息;
资源查找模块,用于根据所述绑定信息指示的绑定方式和资源信息,执行不同的资源加载流程;
动态绑定模块,用于在获取到动画资源之后,根据所述绑定信息指示的序列化方式和轨道信息,调用相应的接口恢复所述时间轴预制体中轨道与资源的绑定;
所述资源查找模块在用于根据所述绑定信息指示的绑定方式和资源信息,执行不同的资源加载流程时,所述资源查找模块用于:
如果所述绑定方式是静态预制体类型,根据资源信息指示的资源路径加载动画资源;
如果所述绑定方式是运行时动态引用类型,根据所述资源信息指示的动态物体类型去动态物体集合中获取动态资源;
如果所述绑定方式是运行时静态引用类型,根据所述资源信息指示的资源标识符去静态物体集合中获取静态资源。
8.一种电子设备,其特征在于,所述电子设备包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为执行权利要求1-6任意一项所述的时间轴工具的资源动态加载方法。
9.一种计算机可读存储介质,其特征在于,所述存储介质存储有计算机程序,所述计算机程序可由处理器执行以完成权利要求1-6任意一项所述的时间轴工具的资源动态加载方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010649321.XA CN111760293B (zh) | 2020-07-07 | 2020-07-07 | 时间轴工具的资源动态加载方法及装置、电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010649321.XA CN111760293B (zh) | 2020-07-07 | 2020-07-07 | 时间轴工具的资源动态加载方法及装置、电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111760293A CN111760293A (zh) | 2020-10-13 |
CN111760293B true CN111760293B (zh) | 2024-02-09 |
Family
ID=72725164
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010649321.XA Active CN111760293B (zh) | 2020-07-07 | 2020-07-07 | 时间轴工具的资源动态加载方法及装置、电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111760293B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117173293B (zh) * | 2023-11-03 | 2024-01-26 | 武汉方拓数字科技有限公司 | 一种基于Unity的动画曲线序列化方法 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102725730A (zh) * | 2009-12-18 | 2012-10-10 | 赛丹思科大学 | 用于静态键入的基于类的面向对象的软件的非阻挡动态更新的方法、计算机程序产品和系统 |
CN104268229A (zh) * | 2014-09-26 | 2015-01-07 | 北京金山安全软件有限公司 | 一种基于多进程浏览器的资源获得方法及装置 |
CN106570931A (zh) * | 2016-10-10 | 2017-04-19 | 福建网龙计算机网络信息技术有限公司 | 一种虚拟现实资源制作方法及系统 |
CN108786112A (zh) * | 2018-04-26 | 2018-11-13 | 腾讯科技(上海)有限公司 | 一种应用场景配置方法、装置和存储介质 |
CN109876448A (zh) * | 2019-02-21 | 2019-06-14 | 腾讯科技(深圳)有限公司 | 一种游戏技能实时调试方法、设备、装置及系统 |
CN111145317A (zh) * | 2019-12-26 | 2020-05-12 | 北京像素软件科技股份有限公司 | 游戏动画的播放方法、装置及服务器 |
CN111249744A (zh) * | 2020-01-19 | 2020-06-09 | 腾讯科技(深圳)有限公司 | 资源加载方法和装置、存储介质及电子装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060100973A1 (en) * | 2004-10-21 | 2006-05-11 | Microsoft Corporation | Real-time localized resource extraction |
-
2020
- 2020-07-07 CN CN202010649321.XA patent/CN111760293B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102725730A (zh) * | 2009-12-18 | 2012-10-10 | 赛丹思科大学 | 用于静态键入的基于类的面向对象的软件的非阻挡动态更新的方法、计算机程序产品和系统 |
CN104268229A (zh) * | 2014-09-26 | 2015-01-07 | 北京金山安全软件有限公司 | 一种基于多进程浏览器的资源获得方法及装置 |
CN106570931A (zh) * | 2016-10-10 | 2017-04-19 | 福建网龙计算机网络信息技术有限公司 | 一种虚拟现实资源制作方法及系统 |
CN108786112A (zh) * | 2018-04-26 | 2018-11-13 | 腾讯科技(上海)有限公司 | 一种应用场景配置方法、装置和存储介质 |
CN109876448A (zh) * | 2019-02-21 | 2019-06-14 | 腾讯科技(深圳)有限公司 | 一种游戏技能实时调试方法、设备、装置及系统 |
CN111145317A (zh) * | 2019-12-26 | 2020-05-12 | 北京像素软件科技股份有限公司 | 游戏动画的播放方法、装置及服务器 |
CN111249744A (zh) * | 2020-01-19 | 2020-06-09 | 腾讯科技(深圳)有限公司 | 资源加载方法和装置、存储介质及电子装置 |
Also Published As
Publication number | Publication date |
---|---|
CN111760293A (zh) | 2020-10-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6096095A (en) | Producing persistent representations of complex data structures | |
US9311623B2 (en) | System to view and manipulate artifacts at a temporal reference point | |
US7606836B2 (en) | Methods for efficient data version verification | |
JP2006244493A (ja) | データベース内で表現されるファイル・システム | |
JPH08511116A (ja) | ドキュメント・フレームワーク・システム | |
EP2110781A1 (en) | Method and system for automatic tracing of a computerized process using a relationship model | |
JP2004362595A (ja) | データベースオブジェクトスクリプト生成方法およびシステム | |
CN106991100B (zh) | 数据导入方法及装置 | |
CN112860260B (zh) | 一种在高校场景下基于web的跨平台应用构建工具及方法 | |
El-Ramly et al. | Mining system-user interaction traces for use case models | |
CN111760293B (zh) | 时间轴工具的资源动态加载方法及装置、电子设备 | |
CN116560626A (zh) | 基于自定义规则的数据处理方法、系统、设备和存储介质 | |
WO2001060060A1 (en) | Control of sequence of video modifying operations | |
US9244651B2 (en) | Document revision control | |
US5878428A (en) | System, method, and article of manufacture for adding transactional recovery to a binary class in an object oriented system | |
CN110083339A (zh) | 一种新型计算机编程语言 | |
US10095812B2 (en) | Systems and methods for providing CAx data | |
JP2023553220A (ja) | マルチインスタンスプロセスのためのプロセスマイニング | |
CN1828596A (zh) | 在数据库内部表示的文件系统 | |
Lucrédio et al. | MVCASE Tool–Working with Design Patterns | |
JP6744549B2 (ja) | 開発支援装置、開発支援方法および開発支援プログラム | |
Collins et al. | USD at Scale | |
CN113730920B (zh) | 一种预设组件同步属性的方法及其系统 | |
CN103164257B (zh) | 工业组态应用中的多平台画面动态调用方法和系统 | |
Curtis | Efficient control of assets in a modern production pipeline |
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 |