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.