Infinity Particle System Package在 1.3.0 版本(要求引擎版本:Tuanjie 1.8.0 及以上)中引入了InfinityAsset文件,这一创新设计允许多个粒子系统最大限度地共享配置参数。开发者能够运用 InfinityAsset,在保证粒子效果的情况下,有效降低 Infinity 粒子系统在实例化阶段的开销。该能力支持全平台,在移动设备上也有不错的收益。

InfinityAsset 带来的收益
性能收益

粒子系统通过 InfinityAsset 共享的参数,能够减少大量重复性的实例化开销。如下图所示,在 PoolInstantiate 场景支持 InfinityAsset 后,粒子池中粒子系统的 awake 时间从 137ms 降低到了54ms,整个粒子池的初始化开销也从 900ms 以上降低到了约110ms,提升非常明显。

打开网易新闻 查看精彩图片

Android 平台 PoolInstantiate 场景第二帧 Infinity 不使用 InfinityAsset

打开网易新闻 查看精彩图片

Android 平台 PoolInstantiate 场景第二帧 Infinity 使用 InfinityAsset

打开网易新闻 查看精彩图片

开发者观察到的性能提升,取决于场景中能够共享参数的粒子系统数量,可共享的数量越多,获得的收益就越大。但值得说明的是,即便没有可共享参数的粒子系统,InfinityAsset 针对序列化/反序列化流程做出了优化,也能获得较之前版本更好的性能。

内存收益

InfinityAsset 能够同时降低粒子系统的内存开销。通过 Memory Profiler 分析,不难发现,新增 InfinityAsset 后,粒子系统中用于存储参数的内存明显降低。

打开网易新闻 查看精彩图片

改用 InfinityAsset 后,Test200 场景,参数存储开销约为 250K

打开网易新闻 查看精彩图片

旧版 Infinity 粒子系统,Test200 场景,参数存储开销约 1.5M

打开网易新闻 查看精彩图片

Built-In 粒子系统,Test200 场景内,粒子系统共有 3M 开销

同样的,这部分内存收益,也取决于场景中能够共享参数的粒子系统数量,可共享的数量越多,获得的内存收益也就越大。

InfinityAsset 如何使用
快速使用

1.您可以通过以下方式为 Infinity 粒子系统设置合适的 InfinityAsset

打开网易新闻 查看精彩图片

step 1. 创建粒子系统

打开网易新闻 查看精彩图片

step 2. 选择/创建 Infinity Asset

打开网易新闻 查看精彩图片

step 3. 调整粒子特效

改用 InfinityAsset 后,开发者使用粒子系统的流程基本不变,仅在创建粒子系统时新增“选择 InfinityAsset ”步骤,用于辅助用户使用合适的 InfinityAsset。

2.备注说明:

  • InfinityParticleSystem 依赖于 InfinityAsset ,且一开始必须选择一个 InfinityAsset,如未选择合适的 InfinityAsset,会引起报错。

  • 开发者修改 InfinityParticleSystem,会同步修改到 InfinityAsset,并影响到所有引用了这个 InfinityAsset 的 InfinityParticleSystem。

  • InfinityParticleSystem 中有部分场景相关参数未被包含在 InfinityAsset 中,具体为:

    • MainModule 下的 CustomSimulationSpace

    • ShapeModule 下的 ShapeMeshRenderer、

      ShapeSkinnedMeshRenderer、ShapeSpriteRenderer

    • ExternalForceModule 下的

      InfinityForceField

    • CollisionModule 下的 CollisionPlanes

    • TriggerModule 下的 TriggerPrimitives

    • SubEmitterModule 下的 SubEmitter 及对应的 emitterMode、inherit、emit probability 等

    • LightModule 下的 Light

    • RendererModule 下的 RendererAnchor

这些参数都能接收/只接收场景内的 GameObject 而非 Asset 对象,因此无法被 InfinityAsset 序列化,因此需要为每个粒子系统单独存储。

请注意:开发者在修改这些参数时,仅修改了当前粒子系统,并无法同步到所有引用该 InfinityAsset 的粒子系统。

如何转化为 InfinityAsset
从 Built-In 粒子系统转化为 InfinityAsset

如之前版本,开发者仍能通过 Convert 脚本将 Built-In 粒子系统转换为新版的 Infinity 粒子系统。

  • InfinityAsset 会默认保存于 Assets/InfinityAsset/ 路径下,如有需求,可自行调整存储位置。

打开网易新闻 查看精彩图片
打开网易新闻 查看精彩图片

从旧版本的 Infinity 粒子系统转化为 InfinityAsset

1.为了辅助开发者将旧版的 Infinity 粒子系统切换成支持 InfinityAsset 的粒子系统,新增了一个 Convert 工具。

打开网易新闻 查看精彩图片
打开网易新闻 查看精彩图片

2.如果是从旧版本的 InfinityAsset 转换到 InfinityAsset,一个 GameObject 下会存在两个 Infinity 粒子系统相关的 component,一个旧版本的 ParticleSystemSharp,一个新版本的 InfinityParticleSystem,在转移完成后,可以删除旧版本的 ParticleSystemSharp。

  • 我们在这个版本仍然保留旧版本的 component,是为了保留旧版本下的序列化信息,方便做 converter。待完成了 converter 后,旧版本就不再有意义。

  • 后续更新中,我们会删除 ParticleSystemSharp 这个 component。


Known issues

1.Converter 脚本使用时,如 game object 的名字中带有如"/"、"\\"等符号,会导致文件路径识别错误,请开发者在使用时注意。

2.Shader 的转化问题仍然存在,部分 Shader 需要用户手动转化

  • 这部分可以参考之前 Infinity 发布时对 Shader 的说明:迁移粒子系统shader | Infinity Particle System | 1.1.0-pre.1

https://docs.unity.cn/cn/Packages-cn/cn.tuanjie.infinity@1.1/manual/InfinityTransferShader.html

Unity 官方微信

第一时间了解Unity引擎动向,学习进阶开发技能

每一个“点赞”、“在看”,都是我们前进的动力

打开网易新闻 查看精彩图片