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引擎动向,学习进阶开发技能
每一个“点赞”、“在看”,都是我们前进的动力

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.