CN107154068B - 一种动画生成方法、装置、客户端以及计算机可读存储介质 - Google Patents

一种动画生成方法、装置、客户端以及计算机可读存储介质 Download PDF

Info

Publication number
CN107154068B
CN107154068B CN201710330862.4A CN201710330862A CN107154068B CN 107154068 B CN107154068 B CN 107154068B CN 201710330862 A CN201710330862 A CN 201710330862A CN 107154068 B CN107154068 B CN 107154068B
Authority
CN
China
Prior art keywords
special efficacy
action
management node
object pool
pool management
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
CN201710330862.4A
Other languages
English (en)
Other versions
CN107154068A (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 CN201710330862.4A priority Critical patent/CN107154068B/zh
Publication of CN107154068A publication Critical patent/CN107154068A/zh
Application granted granted Critical
Publication of CN107154068B publication Critical patent/CN107154068B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T13/00Animation
    • G06T13/203D [Three Dimensional] animation

Landscapes

  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Processing Or Creating Images (AREA)

Abstract

本发明涉及一种动画生成方法、装置、客户端以及计算机可读存储介质,包括:当第一动作被执行时,判断对象池管理节点是否包含第一动作特效;若所述对象池管理节点包含所述第一动作特效,从所述对象池管理节点加载所述第一动作特效,并初始化所述第一动作特效;将所述恢复后的第一动作特效移动至第一动作节点下,并将所述第一动作特效设置为激活状态。通过对象池管理器将游戏对象的动作进行回收,避免由于大量的创建和销毁粒子特效导致的游戏整个性能降低,避免游戏卡顿的出现。

Description

一种动画生成方法、装置、客户端以及计算机可读存储介质
技术领域
本发明涉及图像处理技术领域,特别地,涉及一种动画生成方法、装 置、客户端以及计算机可读存储介质。
背景技术
Unity是由Unity Technologies开发的一个让玩家轻松创建诸如三维 视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型 游戏开发工具,是一个全面整合的专业游戏引擎。Unity类似于 Director,Blender game engine,Virtools或TorqueGame Builder等利 用交互的图型化开发环境为首要方式的软件。其编辑器运行在Windows和 Mac OS X下,可发布游戏至Windows、Mac、Wii、iPhone、WebGL(需要HTML5)、 Windowsphone 8和Android平台。也可以利用Unity web player插件发 布网页游戏,支持Mac和Windows的网页浏览。它的网页播放器也被Mac widgets所支持。
使用Unity制作的大部分3d游戏都会使用到其自带的粒子系统 (ParticleSystem),它的优点有很多,比如美术工具使用起来十分方便, 制作特效的效率较快。并且和引擎高度兼容,由于是引擎原生的功能,不 需要担心版本升级带来的不兼容等问题。但是,随着3d游戏的计算量和复 杂度不断提高,Unity等3d制作也出现了一些问题。
发明内容
为了解决现有技术中存在的技术问题,本发明实施例提供了一种动画 生成方法、装置、客户端以及计算机可读存储介质,技术方案如下:
第一方面,本发明提供一种动画生成方法,包括如下步骤:当第一动 作被执行时,判断对象池管理节点是否包含第一动作特效;若所述对象池 管理节点包含所述第一动作特效,从所述对象池管理节点加载所述第一动 作特效,并初始化所述第一动作特效;将所述恢复后的第一动作特效移动 至第一动作节点下,并将所述第一动作特效设置为激活状态。
第二方面,本发明提供一种动画生成装置,所述装置包括如下模块: 判断模块,用于在第一动作被执行时,判断对象池管理节点是否包含第一 动作特效;第一条件执行模块,用于在所述对象池管理节点包含所述第一 动作特效时,从所述对象池管理节点加载所述第一动作特效,并初始化所 述第一动作特效;激活模块,用于将所述初始化的第一动作特效移动至第 一动作节点下,并将所述第一动作特效设置为激活状态。
第三方面,本发明提供一种客户端,包括前述的客户端。
第四方面,本发明提供一种计算机可读存储介质,其上存储有计算机 程序,其特征在于,该程序被处理器执行时实现前述的方法。
本发明能够达到的有益效果:通过对象池管理器(WLPoolManager)将 游戏对象(GameObject)的动作进行回收,避免由于大量的创建 (Instantiate)和(Destroy)这些粒子特效导致的游戏整个性能降低, 避免游戏卡顿的出现。
附图说明
下面结合附图对本发明的具体实施方式作进一步详细的说明;
图1(a)-(c)是本发明实施例提供的人物动画效果示意图。
图2是本发明实施例提供的方法流程示意图。
图3是本发明实施例提供的方法流程示意图。
图4(a)(b)是本发明实施例提供的方法流程示意图。
图5(a)-(c)是本发明另一实施例提供的人物动画效果示意图。
图6是本发明实施例提供的装置结构原理的框图。
图7(a)-(c)是本发明实施例提供的装置结构原理的框图。
图8是本发明实施例提供的终端结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明 实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述, 显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施 例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动 前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
本发明实施例涉及的技术术语如下:
Unity:是一个用于创建诸如三维电子游戏、建筑可视化、实时三维动 画等类型互动内容的综合型创作工具。Unity类似于Director,Blender, Virtools或Torque GameBuilder等利用交互的图型化开发环境为首要方 式的软件其编辑器运行在Windows和MacOS X下,可发布游戏至windows, OSX,android,ios等多个平台。
游戏对象(GameObjects):游戏中的每个对象都是一个GameObject, GameObject是一种容器。
组件(Components):包含在GameObject中,用来控制GameObject的 运动,旋转等等功能。
Particles:Unity中的粒子系统。
实例化(Instantiate):实例化游戏对象(GameObjects)。
Destory:销毁游戏对象(GameObjects)或组件(Components)。
预设(Prefabs):预定义游戏对象(GameObjects)和组件(Components) 的集合,可在游戏中重复使用。
对象池:第一次创建的时候就将对象存储在一个池子中,当需要销毁 的时候不直接销毁而是隐藏,当需要时在再次使用,就不需要再次实例化 一个新的对象,直接把隐藏的对象显示并拿出来用。
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本 发明实施方式作进一步地详细描述。
如图1(a)至图1(c)所示,在一个实施例中,Unity粒子系统很方便使 用,但是在一般的3d游戏中,会用到大量的粒子特效。游戏或者视频动画 中会频繁而且相对大量的创建(Instantiate)和销毁(Destroy)这些粒 子特效,这会导致游戏整个性能降低,如果创建的数量过多,内存很容易 不足,比较典型的,是出现卡顿现象。查看发现主要卡顿点在两处地方,一 是实例化过程(Instantiate),尤其是类似Rigdbody的组件在激活时会更 新一些全局的状态。二是GC.Collect.Unity的自动GC发生的时间是无法 控制的,可能发生在任何时间点。对于一来说可以通过分批激活的方式来 解决,比如使用coroutine来挨个激活就可以避免卡顿。但对于二来说只 有避免GC那就要避免大量的销毁(Destory)。
综上,如果想避免游戏中的卡顿,首先要使用对象池,重复使用对象, 避免对象的销毁。二是在合适的时候手动GC,比如加载界面。为了避免游 戏中由于持续生成和销毁特效实体而造成的卡顿,为了重复利用资源,会 设计对象池来解决这一问题。但是,Unity的粒子系统(Particles)和初 始化会有一些问题,在实际动画生成过程中发现,带Trail的游戏对象 (GameObject)在重用后,由于没有重置,会在旧的位置和新的位置之间 产生拖尾。而带有粒子系统的游戏对象(GameObject)再重用过程中参数 会不断积累,从而造成粒子缩放问题。
如图2所示,在一个实施例中,提出一种动画生成方法,包括:
S210,当第一动作被执行时,实例化第一动作特效,并存储于第一动作 节点下;
S220,所述第一动作结束时,将所述第一动作特效回收至对象池管理节 点下,并将所述第一动作特效设置为非激活状态;
S230,当再次执行所述第一动作时,从所述对象池管理节点加载所述第 一动作特效,恢复所述第一动作特效参数;
S240,将所述恢复后的第一动作特效移动至第一动作节点下,并将所述 第一动作特效设置为激活状态。
综上所述,本实施例通过对象池管理器(WLPoolManager)将游戏对象(GameObject)的动作进行回收,避免由于大量的创建(Instantiate)和 (Destroy)这些粒子特效导致的游戏整个性能降低,避免游戏卡顿的出现。
但是在特效回收过程中,还发现了伴随有拖尾和粒子缩放现象,在图1 (a)-图1(c)中,图1(a)是初始化的粒子效果;图1(b)是第一次重 复利用的粒子效果,已经出现了由于的粒子缩放导致的画面劣化;图1(c) 是第二次重复利用的粒子效果,已经出现了较为严重的粒子缩放导致的画 面劣化。
如图3所示,在一个实施例中,提出一种动画生成方法,包括:
S310,当第一动作被执行时,判断对象池管理节点是否包含被实例化的 第一动作特效。
第一动作是指游戏对象(GameObject)预设动作的实例化,可以包含 游戏对象(GameObject)的静态或者动态的动作,例如,游戏对象的奔跑、 跳跃等类型的肢体性动作;还例如游戏对象的射击、蓄力、范围攻击等类 型的外放型动作;还例如,游戏对象进行点头、屈膝等类型的细部动作。 当第一动作被执行时,动画播放界面会对应地播放该动作的动画特效,动 画特效需要被实例化的动作特效。
在本实施例中,当第一动作被执行,动画特效需要被播放时,首先不 进行动画特效的实例化,而是检查是否有已经实例化的第一动作特效被存 储于对象池中。因为,如果在对象池中包含已经被实例化的第一动作特效, 那么就无需重新实例化第一动作特效,这样可以减少实例的创建 (Instantiate)次数,同时对动作特效的回收也可以减少对实例的销毁 (Destroy)次数,这样可以节省内容,避免由于大量的创建(Instantiate) 和销毁(Destroy)这些粒子特效,而导致游戏性能降低。
S320,若包含被实例化的第一动作特效,从所述对象池管理节点加载所 述第一动作特效,并恢复所述第一动作特效。
在步骤S310的判断之后,如果对象池管理节点包含被实例化的第一动 作特效,即,第一动作特效在之前被回收过,那么可以对第一动作特效进 行重新利用。利用的过程的包括从对象池管理节点下加载第一动作特效, 以及恢复第一动作特效。之所以要恢复第一动作特效是由于带Trail的游 戏对象(GameObject)在重用后,由于没有重置,会在旧的位置和新的位 置之间产生拖尾。而带有粒子系统的游戏对象(GameObject)再重用过程 中参数会不断积累,从而造成粒子缩放问题。
S330,将所述恢复后的第一动作特效移动至第一动作节点下,并将所述 第一动作特效设置为激活状态。
在对第一动作特效进行恢复,并移动至第一动作节点下之后,相当于 新创建了一个第一动作特效,此时只要将第一动作特效进行激活,第一动 作特效就会在动画播放界面上执行播放。
综上所述,本实施例通过对象池管理器(WLPoolManager)将游戏对象(GameObject)的动作进行回收,避免由于大量的创建(Instantiate)和 (Destroy)这些粒子特效导致的游戏整个性能降低,避免游戏卡顿的出现。
如图4所示,在一个实施例中,提出一种动画生成方法,包括:
S410,当第一动作被执行时,判断对象池管理节点是否包含被实例化的 第一动作特效。
第一动作是指游戏对象(GameObject)预设动作的实例化,可以包含 游戏对象(GameObject)的静态或者动态的动作,例如,游戏对象的奔跑、 跳跃等类型的肢体性动作;还例如,游戏对象的射击、蓄力、范围攻击等 类型的外放型动作;还例如,游戏对象进行点头、屈膝等类型的细部动作。 当第一动作被执行时,动画播放界面会对应地播放该动作的动画特效,动 画特效需要被实例化的动作特效。
在本实施例中,当第一动作被执行,动画特效需要被播放时,首先不 进行动画特效的实例化,而是检查是否有已经实例化的第一动作特效被存 储于对象池中。因为,如果在对象池中包含已经被实例化的第一动作特效, 那么就无需重新实例化第一动作特效,这样可以减少实例的创建 (Instantiate)次数,同时对动作特效的回收也可以减少对实例的销毁 (Destroy)次数,这样可以节省内容,避免由于大量的创建(Instantiate) 和销毁(Destroy)这些粒子特效,而导致游戏性能降低。
S420,若包含被实例化的第一动作特效,从所述对象池管理节点加载所 述第一动作特效,并恢复所述第一动作特效。
在步骤S410的判断之后,如果对象池管理节点包含被实例化的第一动 作特效,即,第一动作特效在之前被回收过,那么可以对第一动作特效进 行重新利用。利用的过程的包括从对象池管理节点下加载第一动作特效, 以及恢复第一动作特效。之所以要恢复第一动作特效是由于带Trail的游 戏对象(GameObject)在重用后,由于没有重置,会在旧的位置和新的位 置之间产生拖尾。而带有粒子系统的游戏对象(GameObject)再重用过程 中参数会不断积累,从而造成粒子缩放问题。
在一个实施例中,如图4(b)所示,当从对象池管理节点加载所述第 一动作特效时,恢复所述第一动作特效步骤被激活,包括:
S4201,构建重置对象池管理节点实例组件,获取特效自身和所有子节 点上的粒子系统。
重置对象池管理节点实例组件(ResetPoolInstance.cs),会在恢复所 述第一动作特效步骤被激活时被唤醒(Awake)。在一个示例中,通过获取 粒子系统孩子节点函数GetComponentsInChildren<ParticleSystem>()来 获取特效自身和所有子节点身上的粒子系统。
S4202,渲染第一动作特效。
重置对象池管理节点实例组件(ResetPoolInstance.cs),在被唤醒后, 即处于使能状态(OnEable),通过渲染使能组件开始对第一动作特效进行 渲染。
在一个示例中,通过GetComponent<Renderer>()enabled=true来开始 渲染。
S4203,重置粒子系统时间,清除上一次残留特效,重新仿真。
由于第一动作特效是从上一次动作中的回收效果,其中的粒子系统时 间不为0,因此需要对粒子系统的时间进行归零。在一个示例中,通过设置 粒子系统的系统时间time=0来实现。
由于第一动作特效是从上一次动作中的回收效果,因此需要对回收动 作的残留进行特效清楚。这样可以防止残留,拖尾等动画残留的出现。
重新仿真步骤是通过Simulate()函数来实现的。在一个示例中, Simulate函数包含三个主要参数,表示为Simulate(0f,false,true), 第一参数表示仿真初始时间,第二参数表示是否包含孩子节点,第三参数 表示是否重新开始。在一个示例中,对于第二参数,由于从之前步骤拿到 的是所有粒子系统,所以设置为false,第三个参数表示是否重新开始仿真 (restart),设置为true。
重新仿真过程还进一步包含了对粒子系统进行缩放的步骤,该步骤包 括记录粒子初始状态,包括粒子的初始大小,初始重力因子,初始速度。
在一个示例中,通过粒子控制组件(ParticleController.cs)进行对粒 子系统进行缩放。在此组件被唤醒(Awake)时,记录下粒子初始的状态。 包括,粒子的初始大小(m_fOrgStartSize),粒子的初始重力因子 (m_fOrgGravityModifier),粒子的初始速度(m_fOrgStartSpeed)等,通过 记录下这些值为缩放粒子提供依据。
在一个示例中,在初始化这些参数后,通过循环对每个粒子的初始参 数进行记录。如下例所示:
m_particles=gameObject.GetComponetsInChildren<ParticleSystem>();
m_fOrgStartSize=new float[m_particles.Length];
m_fOrgGravityModifier=new float[m_particles.Length];
m_fOrgStartSpeed=new float[m_particles.Length];
for(int i=0;i<m_particles.Length;++i)
{
m_fOrgStartSize[i]=m_particles[i].startSize;
m_fOrgGravityModifier[i]=m_particles[i].GravityModifier;
m_fOrgStartSpeed[i]=m_particles[i].StartSpeed;
}
在初始化粒子参数后,根据缩放因子的对粒子进行缩放,基于缩放因 子对初始参数进行缩放,在一个示例中缩放是同比例的,如下:
m_particles[i].startSize=m_fOrgStartSize[i]*_scaleMultiplier;
m_particles[i].GravityModifier=m_fOrgGravityModifier[i]*_scaleMultipli -er;
m_particles[i].StartSpeed=m_fOrgStartSpeed[i]*_scaleMultiplier;
在另一个实施例中,对于不同参数的缩放因子是不同的,缩放因子可 以是相互独立的,或者按照的预设的函数呈比例关系、线性关系、指数关 系设置的。
缩放因子可以通过编辑器配置,也可以根据预设的程序设置,预设程序 可以是自适应的配置。基于上述过程中对缩放因子的配置,可以解决游戏 对象(GameObject)再重用过程中参数不断积累,从而造成粒子缩放问题。
在一个示例中,编辑器相对于用户而言是一个黑盒子,用户可以根据 需要对参数进行配置。用户界面(UI)可以设置成一个可嵌套的特效编辑 系统,待配置完成后,转换为系统所需的配置参数,以在运行时加载。
当然,还可能存在对象池管理节点未包含之前回收的第一动作特效的 情况,此时,需要重新实例化第一动作特效,此时执行如下步骤:
步骤S450,若不包含被实例化的第一动作特效,实例化第一动作特效, 并存储于第一动作节点下。
之后,执行步骤S440,在所述第一动作结束时,将所述第一动作特效 回收至对象池管理节点下,并将所述第一动作特效设置为非激活状态。
S430,将所述恢复后的第一动作特效移动至第一动作节点下,并将所述 第一动作特效设置为激活状态。
所述步骤S430后还进一步包括:
S440,所述第一动作结束时,将所述第一动作特效回收至对象池管理节 点下,并将所述第一动作特效设置为非激活状态。
综上所述,在上述步骤中,将对象池管理器(WLPoolManager)和重置 粒子的组件(ResetPoolInstance.cs)进行结合,能够将游戏对象 (GameObject)的动作进行回收,避免由于大量的创建(Instantiate)和 (Destroy)这些粒子特效导致的游戏整个性能降低,并且还能够解决带有 粒子系统的游戏对象(GameObject)再重用过程中参数不断积累,而造成 的粒子缩放问题。
如图5(a)-5(c)所示,在使用了对象池管理器(WLPoolManager) 和重置粒子的组件(ResetPoolInstance.cs)进行结合的技术之后,当游 戏对象(GameObject)攻击时,特效实例化(ShellBullet)出来放到角色 攻击节点下,红框所示。当角色第一次攻击结束后,我们会回收特效,将 其放到对象池管理器(WLPoolManager)这个根节点下,并且设置其非激活 状态。当角色第二次攻击时,我们会把特效从对象池管理器 (WLPoolManager)根节点下拿出,通过重置粒子的组件 (ResetPoolInstance.cs)恢复其参数,再将其放到角色攻击节点下并激 活此特效。此时,第二次重置后的特效和第一次实例化出来的是一致的, 不存在游戏性能降低和粒子缩放问题。图5(a)是第一次实例化的特效, 图5(b)则是对实例进行回收的过程,在这个过程中,第一动作特效被从 第一动作节点下回收至对象池管理节点下。图5(c)是第二次攻击恢复特 效,第二次攻击特效与第一次实例化的特效没有出现拖尾和缩放的效果劣 化。
如图6所示,本实施例提供一种动画播放装置,装置结构如下:
判断模块,用于在第一动作被执行时,判断对象池管理节点是否包含 第一动作特效;
第一条件执行模块,用于在所述对象池管理节点包含所述第一动作特 效时,从所述对象池管理节点加载所述第一动作特效,并初始化所述第一 动作特效;
激活模块,用于将所述初始化的第一动作特效移动至第一动作节点下, 并将所述第一动作特效设置为激活状态。
所述装置能够执行步骤S310-S330所述的方法。
如图7(a)所示,本实施例提供一种动画播放装置,装置结构如下:
判断模块,用于在第一动作被执行时,判断对象池管理节点是否包含 第一动作特效;
第一动作是指游戏对象(GameObject)预设动作的实例化,可以包含 游戏对象(GameObject)的静态或者动态的动作,例如,游戏对象的奔跑、 跳跃等类型的肢体性动作;还例如,游戏对象的射击、蓄力、范围攻击等 类型的外放型动作;还例如,游戏对象进行点头、屈膝等类型的细部动作。 当第一动作被执行时,动画播放界面会对应地播放该动作的动画特效,动 画特效需要被实例化的动作特效。
在本实施例中,当第一动作被执行,动画特效需要被播放时,首先不 进行动画特效的实例化,而是检查是否有已经实例化的第一动作特效被存 储于对象池中。因为,如果在对象池中包含已经被实例化的第一动作特效, 那么就无需重新实例化第一动作特效,这样可以减少实例的创建 (Instantiate)次数,同时对动作特效的回收也可以减少对实例的销毁 (Destroy)次数,这样可以节省内容,避免由于大量的创建(Instantiate) 和销毁(Destroy)这些粒子特效,而导致游戏性能降低。
第一条件执行模块,用于在所述对象池管理节点包含所述第一动作特 效时,从所述对象池管理节点加载所述第一动作特效,并初始化所述第一 动作特效。
在判断模块执行判断操作之后,如果对象池管理节点包含被实例化的 第一动作特效,即,第一动作特效在之前被回收过,那么可以对第一动作 特效进行重新利用。利用的过程的包括从对象池管理节点下加载第一动作 特效,以及恢复第一动作特效。之所以要恢复第一动作特效是由于带Trail 的游戏对象(GameObject)在重用后,由于没有重置,会在旧的位置和新 的位置之间产生拖尾。而带有粒子系统的游戏对象(GameObject)再重用 过程中参数会不断积累,从而造成粒子缩放问题。
激活模块,用于将所述初始化的第一动作特效移动至第一动作节点下, 并将所述第一动作特效设置为激活状态。
第二条件执行模块,用于在所述对象池管理节点不包含第一动作特效 时,创建第一动作特效,将所述第一动作特效存储于第一动作节点下,并 将所述第一动作特效设置为激活状态。
回收模块,用于在所述第一动作结束时,将所述第一动作特效回收至 对象池管理节点,并将所述第一动作特效设置为非激活状态。
如图7(b)所示,所述第一条件执行模块还包括:
粒子系统获取模块,用于获取所述第一特效自身和所有子节点上的粒 子系统。重置对象池管理节点实例组件(ResetPoolInstance.cs),会在恢 复所述第一动作特效步骤被激活时被唤醒(Awake)。在一个示例中,通过 获取粒子系统孩子节点函数GetComponentsInChildren<ParticleSystem>() 来获取特效自身和所有子节点身上的粒子系统。
渲染子模块,用于渲染第一动作特效。重置对象池管理节点实例组件(ResetPoolInstance.cs),在被唤醒后,即处于使能状态(OnEable),通 过渲染使能组件开始对第一动作特效进行渲染。在一个示例中,通过GetComponent<Renderer>()enabled=true来开始渲染。
重置和清除模块,用于重置所述粒子系统的系统时间,清除所述第一 动作特效中的残留特效。由于第一动作特效是从上一次动作中的回收效果, 其中的粒子系统时间不为0,因此需要对粒子系统的时间进行归零。在一个 示例中,通过设置粒子系统的系统时间time=0来实现。由于第一动作特效 是从上一次动作中的回收效果,因此需要对回收动作的残留进行特效清楚。 这样可以防止残留,拖尾等动画残留的出现。
仿真模块,用于对所述第一动作特效重新仿真。重新仿真步骤是通过 Simulate()函数来实现的。在一个示例中,Simulate函数包含三个主要 参数,表示为Simulate(0f,false,true),第一参数表示仿真初始时间, 第二参数表示是否包含孩子节点,第三参数表示是否重新开始。在一个示 例中,对于第二参数,由于从之前步骤拿到的是所有粒子系统,所以设置 为false,第三个参数表示是否重新开始仿真(restart),设置为true。
如图7(c)所示,所述仿真模块包括:
初始状态记录模块,用于记录粒子系统中粒子的初始状态,该模块包 括记录粒子初始状态,包括粒子的初始大小,初始重力因子,初始速度。 在一个示例中,通过粒子控制组件(ParticleController.cs)进行对粒子系 统进行缩放。在此组件被唤醒(Awake)时,记录下粒子初始的状态。包括, 粒子的初始大小(m_fOrgStartSize),粒子的初始重力因子(m_fOrgGravityModifier),粒子的初始速度(m_fOrgStartSpeed)等,通过 记录下这些值为缩放粒子提供依据。
在一个示例中,在初始化这些参数后,通过循环对每个粒子的初始参 数进行记录。如下例所示:
m_particles=gameObject.GetComponetsInChildren<ParticleSystem>();
m_fOrgStartSize=new float[m_particles.Length];
m_fOrgGravityModifier=new float[m_particles.Length];
m_fOrgStartSpeed=new float[m_particles.Length];
for(int i=0;i<m_particles.Length;++i)
{
m_fOrgStartSize[i]=m_particles[i].startSize;
m_fOrgGravityModifier[i]=m_particles[i].GravityModifier;
m_fOrgStartSpeed[i]=m_particles[i].StartSpeed;
}
在初始化粒子参数后,根据缩放因子的对粒子进行缩放,基于缩放因 子对初始参数进行缩放,在一个示例中缩放是同比例的,如下:
m_particles[i].startSize=m_fOrgStartSize[i]*_scaleMultiplier;
m_particles[i].GravityModifier=m_fOrgGravityModifier[i]*_scaleMultipli -er;
m_particles[i].StartSpeed=m_fOrgStartSpeed[i]*_scaleMultiplier;
缩放因子获取模块,用于获取缩放因子。对于不同参数的缩放因子是 不同的,缩放因子可以是相互独立的,或者按照的预设的函数呈比例关系、 线性关系、指数关系设置的。缩放因子可以通过编辑器配置,也可以根据预 设的程序设置,预设程序可以是自适应的配置。基于上述过程中对缩放因 子的配置,可以解决游戏对象(GameObject)再重用过程中参数不断积累, 从而造成粒子缩放问题。在一个示例中,编辑器相对于用户而言是一个黑 盒子,用户可以根据需要对参数进行配置。用户界面(UI)可以设置成一 个可嵌套的特效编辑系统,待配置完成后,转换为系统所需的配置参数, 以在运行时加载。
缩放操作模块,用于根据所述缩放因子对所述粒子的初始状态进行缩 放操作。
所述初始状态记录模块,用于循环记录粒子系统中每一个粒子的初始 大小、初始重力因子和初始速度。
所述装置能够执行步骤S410-S450所述的方法。
综上所述,上述模块通过将对象池管理器(WLPoolManager)和重置粒 子的组件(ResetPoolInstance.cs)进行结合,能够将游戏对象 (GameObject)的动作进行回收,避免由于大量的创建(Instantiate)和 (Destroy)这些粒子特效导致的游戏整个性能降低,并且还能够解决带有 粒子系统的游戏对象(GameObject)再重用过程中参数不断积累,而造成 的粒子缩放问题。
请参考图8,其示出了本发明一个实施例提供的终端的结构示意图。该 终端用于实施上述实施例中提供的透明代理方法。具体来讲:
终端1000可以包括RF(Radio Frequency,射频)电路110、包括有 一个或一个以上计算机可读存储介质的存储器120、输入单元130、显示单 元140、视频传感器150、音频电路160、WiFi(wireless fidelity,无线 保真)模块170、包括有一个或者一个以上处理核心的处理器180、以及电 源190等部件。本领域技术人员可以理解,图8中示出的终端结构并不构成对终端的限定,可以包括比图示更多或更少的部件,或者组合某些部件, 或者不同的部件布置。其中:
RF电路110可用于收发信息或通话过程中,信号的接收和发送,特别 地,将基站的下行信息接收后,交由一个或者一个以上处理器180处理; 另外,将涉及上行的数据发送给基站。通常,RF电路110包括但不限于天 线、至少一个放大器、调谐器、一个或多个振荡器、用户身份模块(SIM) 卡、收发信机、耦合器、LNA(Low Noise Amplifier,低噪声放大器)、双工器等。此外,RF电路110还可以通过无线通信与网络和其他设备通信。 所述无线通信可以使用任一通信标准或协议,包括但不限于GSM(Global System of Mobile communication,全球移动通讯系统)、GPRS(General Packet Radio Service,通用分组无线服务)、CDMA(Code Division Multiple Access,码分多址)、WCDMA(Wideband Code DivisionMultiple Access,宽 带码分多址)、LTE(Long Term Evolution,长期演进)、电子邮件、SMS(Short Messaging Service,短消息服务)等。
存储器120可用于存储软件程序以及模块,处理器180通过运行存储 在存储器120的软件程序以及模块,从而执行各种功能应用以及数据处理。 存储器120可主要包括存储程序区和存储数据区,其中,存储程序区可存 储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播 放功能等)等;存储数据区可存储根据终端1000的使用所创建的数据(比 如视频数据、电话本等)等。此外,存储器120可以包括高速随机存取存 储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器 件、或其他易失性固态存储器件。相应地,存储器120还可以包括存储器 控制器,以提供处理器180和输入单元130对存储器120的访问。
输入单元130可用于接收输入的数字或字符信息,以及产生与用户设 置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。 具体地,输入单元130可包括图像输入设备131以及其他输入设备132。 图像输入设备131可以是摄像头,也可以是光电扫描设备。除了图像输入 设备131,输入单元130还可以包括其他输入设备132。具体地,其他输入 设备132可以包括但不限于物理键盘、功能键(比如音量控制按键、开关 按键等)、轨迹球、鼠标、操作杆等中的一种或多种。
显示单元140可用于显示由用户输入的信息或提供给用户的信息以及 终端1000的各种图形用户接口,这些图形用户接口可以由图形、文本、图 标、视频和其任意组合来构成。显示单元140可包括显示面板141,可选 的,可以采用LCD(Liquid Crystal Display,液晶显示器)、OLED(Organic Light-Emitting Diode,15有机发光二极管)等形式来配置显示面板141。
终端1000可包括至少一种视频传感器150,视频传感器用于获取用户 的视频信息。终端1000还可以包括其它传感器(未示出),比如光传感器、 运动传感器以及其他传感器。具体地,光传感器可包括环境光传感器及接 近传感器,其中,环境光传感器可根据环境光线的明暗来调节显示面板141 的亮度,接近传感器可在终端1000移动到耳边时,关闭显示面板141和/ 或背光。作为运动传感器的一种,重力加速度传感器可检测各个方向上(一般为三轴)加速度的大小,静止时可检测出重力的大小及方向,可用于识 别手机姿态的应用(比如横竖屏切换、相关游戏、磁力计姿态校准)、振动 识别相关功能(比如计步器、敲击)等;至于终端1000还可配置的陀螺仪、 气压计、湿度计、温度计、红外线传感器等其他传感器,在此不再赘述。
视频电路160、扬声器161,传声器162可提供用户与终端1000之间 的视频接口。音频电路160可将接收到的音频数据转换后的电信号,传输 到扬声器161,由扬声器161转换为声音信号输出;另一方面,传声器162 将收集的声音信号转换为电信号,由音频电路160接收后转换为音频数据, 再将音频数据输出处理器180处理后,经RF电路11以发送给比如另一终 端,或者将音频数据输出至存储器120以便进一步处理。音频电路160还 可能包括耳塞插孔,以提供外设耳机与终端1000的通信。
WiFi属于短距离无线传输技术,终端1000通过WiFi模块70可以帮 助用户收发电子邮件、浏览网页和访问流式媒体等,它为用户提供了无线 的宽带互联网访问。虽然图1示出了WiFi模块170,但是可以理解的是, 其并不属于终端1000的必须构成,完全可以根据需要在不改变发明的本质 的范围内而省略。
处理器180是终端1000的控制中心,利用各种接口和线路连接整个 手机的各个部分,通过运行或执行存储在存储器120内的软件程序和/或模 块,以及调用存储在存储器120内的数据,执行终端1000的各种功能和 处理数据,从而对手机进行整体监控。可选的,处理器180可包括一个或 多个处理核心;优选的,处理器180可集成应用处理器和调制解调处理器, 其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调 处理器主要处理无线通信。
可以理解的是,上述调制解调处理器也可以不集成到处理器180中。
终端1000还包括给各个部件供电的电源190(比如电池),优选的, 电源可以通过电源管理系统与处理器180逻辑相连,从而通过电源管理系 统实现管理充电、放电、以及功耗管理等功能。电源190还可以包括一个 或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转 换器或者逆变器、电源状态指示器等任意组件。
尽管未示出,终端1000还可以包括蓝牙模块等,在此不再赘述。
具体在本实施例中,终端1000还包括有存储器,以及一个或者一个以 上的程序,其中一个或者一个以上程序存储于存储器中,且经配置以由一 个或者一个以上处理器执行。上述一个或者一个以上程序包含用于执行上 述发送方客户端侧或者接收方客户端侧的方法的指令。所述指令用于在被 处理器执行时实现如下步骤:
当第一动作被执行时,判断对象池管理节点是否包含第一动作特效;
若所述对象池管理节点包含所述第一动作特效,从所述对象池管理节 点加载所述第一动作特效,并初始化所述第一动作特效;
将所述恢复后的第一动作特效移动至第一动作节点下,并将所述第一 动作特效设置为激活状态。
进一步地,所述指令用于执行如下步骤:若所述对象池管理节点不包 含第一动作特效,创建第一动作特效,将所述第一动作特效存储于第一动 作节点下,并将所述第一动作特效设置为激活状态。
进一步地,所述指令用于执行如下步骤:在所述第一动作结束时,将 所述第一动作特效回收至对象池管理节点,并将所述第一动作特效设置为 非激活状态。
进一步地,所述指令用于执行如下步骤:获取所述第一特效自身和所 有子节点上的粒子系统;渲染第一动作特效;重置所述粒子系统的系统时 间,清除所述第一动作特效中的残留特效;对所述第一动作特效重新仿真。
进一步地,所述指令用于执行如下步骤:记录粒子系统中粒子的初始 状态;获取缩放因子;根据所述缩放因子对所述粒子的初始状态进行缩放 操作。
进一步地,所述指令用于执行如下步骤:循环记录粒子系统中每一个 粒子的初始大小、初始重力因子和初始速度。
应当理解的是,在本文中提及的“多个”是指两个或两个以上。“和/ 或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或 B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字 符“/”一般表示前后关联对象是一种“或”的关系。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以 通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可 以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存 储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发 明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在 本发明的保护范围之内。

Claims (8)

1.一种动画生成方法,其特征在于,所述方法包括如下步骤:
当第一动作被执行时,判断对象池管理节点是否包含第一动作特效;
若所述对象池管理节点包含所述第一动作特效,从所述对象池管理节点加载所述第一动作特效,并恢复所述第一动作特效;
所述恢复所述第一动作特效包括:
获取所述第一动作特效自身和所有子节点上的粒子系统;
渲染第一动作特效;
重置所述粒子系统的系统时间,清除所述第一动作特效中的残留特效;
循环记录粒子系统中每个粒子的初始大小、初始重力因子和初始速度;
获取所述粒子的初始大小、初始重力因子和初始速度的缩放因子,所述初始大小、初始重力因子和初始速度所对应的缩放因子不同,所述缩放因子相互独立,或者按照预设的函数呈比例关系、线性关系、指数关系设置;
根据所述缩放因子对所述粒子的初始状态进行缩放操作;
在恢复所述第一动作特效之后,将所述恢复后的第一动作特效移动至第一动作节点下,并将所述第一动作特效设置为激活状态。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
若所述对象池管理节点不包含第一动作特效,创建第一动作特效,将所述第一动作特效存储于第一动作节点下,并将所述第一动作特效设置为激活状态。
3.根据权利要求1或2所述的方法,其特征在于,所述方法还包括:
在所述第一动作结束时,将所述第一动作特效回收至对象池管理节点,并将所述第一动作特效设置为非激活状态。
4.一种动画生成装置,其特征在于,所述装置包括如下模块:
判断模块,用于在第一动作被执行时,判断对象池管理节点是否包含第一动作特效;
第一条件执行模块,用于在所述对象池管理节点包含所述第一动作特效时,从所述对象池管理节点加载所述第一动作特效,并初始化所述第一动作特效;所述第一条件执行的模块包括:
粒子系统获取模块,用于获取所述第一动作特效自身和所有子节点上的粒子系统;
渲染子模块,用于渲染第一动作特效;
重置所述粒子系统的系统时间,清除所述第一动作特效中的残留特效;
仿真模块,用于对所述第一动作特效重新仿真;所述仿真模块包括:
初始状态记录模块,用于循环记录粒子系统中每个粒子的初始大小、初始重力因子和初始速度;
缩放因子获取模块,用于获取所述粒子的初始大小、初始重力因子和初始速度的缩放因子,所述初始大小、初始重力因子和初始速度所对应的缩放因子不同,所述缩放因子相互独立,或者按照预设的函数呈比例关系、线性关系、指数关系设置;
缩放操作模块,用于根据所述缩放因子对所述粒子的初始状态进行缩放操作;
激活模块,用于将所述初始化的第一动作特效移动至第一动作节点下,并将所述第一动作特效设置为激活状态。
5.根据权利要求4所述的装置,其特征在于,所述装置还包括:
第二条件执行模块,用于在所述对象池管理节点不包含第一动作特效时,创建第一动作特效,将所述第一动作特效存储于第一动作节点下,并将所述第一动作特效设置为激活状态。
6.根据权利要求4或5所述的装置,其特征在于,所述装置还包括:
回收模块,用于在所述第一动作结束时,将所述第一动作特效回收至对象池管理节点,并将所述第一动作特效设置为非激活状态。
7.一种客户端,包括权利要求4-6之一所述的装置。
8.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现权利要求1-3之一所述的方法。
CN201710330862.4A 2017-05-11 2017-05-11 一种动画生成方法、装置、客户端以及计算机可读存储介质 Active CN107154068B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710330862.4A CN107154068B (zh) 2017-05-11 2017-05-11 一种动画生成方法、装置、客户端以及计算机可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710330862.4A CN107154068B (zh) 2017-05-11 2017-05-11 一种动画生成方法、装置、客户端以及计算机可读存储介质

Publications (2)

Publication Number Publication Date
CN107154068A CN107154068A (zh) 2017-09-12
CN107154068B true CN107154068B (zh) 2018-11-09

Family

ID=59793796

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710330862.4A Active CN107154068B (zh) 2017-05-11 2017-05-11 一种动画生成方法、装置、客户端以及计算机可读存储介质

Country Status (1)

Country Link
CN (1) CN107154068B (zh)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108038160B (zh) * 2017-12-06 2019-03-08 央视动画有限公司 动态动画保存方法、动态动画调用方法及装置
CN109731337B (zh) * 2018-12-28 2023-02-21 超级魔方(北京)科技有限公司 Unity中粒子特效创建方法、装置、电子设备及存储介质
CN111124579B (zh) * 2019-12-24 2023-12-19 北京金山安全软件有限公司 一种特效渲染方法、装置、电子设备及存储介质
CN111935534B (zh) * 2020-07-30 2022-09-27 视伴科技(北京)有限公司 一种回放录制视频的方法及装置
CN112584188A (zh) * 2020-12-01 2021-03-30 北京达佳互联信息技术有限公司 数据处理方法、装置及介质
CN113902609B (zh) * 2021-03-17 2022-06-10 广州市保伦电子有限公司 一种基于OpenGL嵌入式设备流畅渲染控件动画方法及设备
CN112891947B (zh) * 2021-04-02 2024-02-23 网易(杭州)网络有限公司 跳跃动画处理方法、装置、电子设备及计算机可读介质

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106649595A (zh) * 2016-11-22 2017-05-10 腾讯科技(深圳)有限公司 一种基于对象池的网页启动加速方法、装置及终端

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103853576B (zh) * 2012-12-06 2017-05-24 腾讯科技(深圳)有限公司 一种截图方法,及装置
CN103324488B (zh) * 2013-07-12 2016-09-07 山东易创电子有限公司 一种特效信息获取方法及装置
CN106408629B (zh) * 2015-08-03 2019-06-14 博雅网络游戏开发(深圳)有限公司 动画渲染方法和装置

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106649595A (zh) * 2016-11-22 2017-05-10 腾讯科技(深圳)有限公司 一种基于对象池的网页启动加速方法、装置及终端

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
《MMORPG网页游戏引擎关键技术的研究》;孙力;《中国优秀硕士学位论文全文数据库 信息科技辑》;20130415(第4期);第I139-208页 *
《Unity优化之ObjectPool-关于初始化》;ainn_pp;《http://blog.csdn.net/ainn_pp/article/details/38752297》;20140822;第1-5页 *
《Unity缩放粒子特效——运行状态》;游在雨城;《http://blog.csdn.net/aiyan1111111/article/details/53197607》;20161117;第1-2页 *
《基于Unity 3D游戏客户端开发框架的设计与应用》;桑琪等;《微型电脑应用》;20160630;第32卷(第6期);第68-69页第3.3、4节 *

Also Published As

Publication number Publication date
CN107154068A (zh) 2017-09-12

Similar Documents

Publication Publication Date Title
CN107154068B (zh) 一种动画生成方法、装置、客户端以及计算机可读存储介质
CN103905885B (zh) 视频直播方法及装置
CN104811787B (zh) 游戏视频录制方法及装置
CN106547599B (zh) 一种资源动态加载的方法及终端
CN105183296B (zh) 交互界面显示方法及装置
CN104967900A (zh) 一种生成视频的方法和装置
CN104967801A (zh) 一种视频数据处理方法和装置
CN107911708A (zh) 弹幕显示方法、直播方法、及相关装置
CN105208458A (zh) 虚拟画面展示方法和装置
CN104519404A (zh) 图像互换格式文件的播放方法及装置
CN104951301A (zh) 家庭媒体播放设备的用户界面处理方法、装置及系统
CN103455969A (zh) 图像处理的方法及装置
CN109933381B (zh) 一种内核的加载方法及装置
CN105187692A (zh) 视频拍摄方法及装置
CN105447124A (zh) 虚拟物品分享方法和装置
CN104036536A (zh) 一种定格动画的生成方法和装置
CN106293901A (zh) 一种终端应用的进程管理方法及装置
CN104426747A (zh) 即时通信方法、终端和系统
CN106454438A (zh) 一种数据处理的方法、相关设备以及系统
CN112347545A (zh) 一种建筑模型处理方法、装置、计算机设备及存储介质
CN104142820A (zh) 一种动画制作方法、装置和系统
CN113398580B (zh) 游戏场景的生成方法及装置、存储介质、电子装置
CN105635553A (zh) 一种图像拍摄方法和装置
CN113010825A (zh) 一种数据处理方法和相关装置
CN108762983A (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