Infinity Particle System Package在 1.3.0 版本(要求引擎版本:Tuanjie 1.8.0 及以上)中引入了InfinityAsset文件,這一創(chuàng)新設計允許多個粒子系統(tǒng)最大限度地共享配置參數(shù)。開發(fā)者能夠運用 InfinityAsset,在保證粒子效果的情況下,有效降低 Infinity 粒子系統(tǒng)在實例化階段的開銷。該能力支持全平臺,在移動設備上也有不錯的收益。
InfinityAsset 帶來的收益
性能收益
粒子系統(tǒng)通過 InfinityAsset 共享的參數(shù),能夠減少大量重復性的實例化開銷。如下圖所示,在 PoolInstantiate 場景支持 InfinityAsset 后,粒子池中粒子系統(tǒng)的 awake 時間從 137ms 降低到了54ms,整個粒子池的初始化開銷也從 900ms 以上降低到了約110ms,提升非常明顯。
![]()
Android 平臺 PoolInstantiate 場景第二幀 Infinity 不使用 InfinityAsset
![]()
Android 平臺 PoolInstantiate 場景第二幀 Infinity 使用 InfinityAsset
![]()
開發(fā)者觀察到的性能提升,取決于場景中能夠共享參數(shù)的粒子系統(tǒng)數(shù)量,可共享的數(shù)量越多,獲得的收益就越大。但值得說明的是,即便沒有可共享參數(shù)的粒子系統(tǒng),InfinityAsset 針對序列化/反序列化流程做出了優(yōu)化,也能獲得較之前版本更好的性能。
內存收益
InfinityAsset 能夠同時降低粒子系統(tǒng)的內存開銷。通過 Memory Profiler 分析,不難發(fā)現(xiàn),新增 InfinityAsset 后,粒子系統(tǒng)中用于存儲參數(shù)的內存明顯降低。
![]()
改用 InfinityAsset 后,Test200 場景,參數(shù)存儲開銷約為 250K
![]()
舊版 Infinity 粒子系統(tǒng),Test200 場景,參數(shù)存儲開銷約 1.5M
![]()
Built-In 粒子系統(tǒng),Test200 場景內,粒子系統(tǒng)共有 3M 開銷
同樣的,這部分內存收益,也取決于場景中能夠共享參數(shù)的粒子系統(tǒng)數(shù)量,可共享的數(shù)量越多,獲得的內存收益也就越大。
InfinityAsset 如何使用
快速使用
1.您可以通過以下方式為 Infinity 粒子系統(tǒng)設置合適的 InfinityAsset
![]()
step 1. 創(chuàng)建粒子系統(tǒng)
![]()
step 2. 選擇/創(chuàng)建 Infinity Asset
![]()
step 3. 調整粒子特效
改用 InfinityAsset 后,開發(fā)者使用粒子系統(tǒng)的流程基本不變,僅在創(chuàng)建粒子系統(tǒng)時新增“選擇 InfinityAsset ”步驟,用于輔助用戶使用合適的 InfinityAsset。
2.備注說明:
InfinityParticleSystem 依賴于 InfinityAsset ,且一開始必須選擇一個 InfinityAsset,如未選擇合適的 InfinityAsset,會引起報錯。
開發(fā)者修改 InfinityParticleSystem,會同步修改到 InfinityAsset,并影響到所有引用了這個 InfinityAsset 的 InfinityParticleSystem。
InfinityParticleSystem 中有部分場景相關參數(shù)未被包含在 InfinityAsset 中,具體為:
MainModule 下的 CustomSimulationSpace
ShapeModule 下的 ShapeMeshRenderer、
ShapeSkinnedMeshRenderer、ShapeSpriteRenderer
ExternalForceModule 下的
InfinityForceField
CollisionModule 下的 CollisionPlanes
TriggerModule 下的 TriggerPrimitives
SubEmitterModule 下的 SubEmitter 及對應的 emitterMode、inherit、emit probability 等
LightModule 下的 Light
RendererModule 下的 RendererAnchor
這些參數(shù)都能接收/只接收場景內的 GameObject 而非 Asset 對象,因此無法被 InfinityAsset 序列化,因此需要為每個粒子系統(tǒng)單獨存儲。
請注意:開發(fā)者在修改這些參數(shù)時,僅修改了當前粒子系統(tǒng),并無法同步到所有引用該 InfinityAsset 的粒子系統(tǒng)。
如何轉化為 InfinityAsset
從 Built-In 粒子系統(tǒng)轉化為 InfinityAsset
如之前版本,開發(fā)者仍能通過 Convert 腳本將 Built-In 粒子系統(tǒng)轉換為新版的 Infinity 粒子系統(tǒng)。
InfinityAsset 會默認保存于 Assets/InfinityAsset/ 路徑下,如有需求,可自行調整存儲位置。
![]()
![]()
從舊版本的 Infinity 粒子系統(tǒng)轉化為 InfinityAsset
1.為了輔助開發(fā)者將舊版的 Infinity 粒子系統(tǒng)切換成支持 InfinityAsset 的粒子系統(tǒng),新增了一個 Convert 工具。
![]()
![]()
2.如果是從舊版本的 InfinityAsset 轉換到 InfinityAsset,一個 GameObject 下會存在兩個 Infinity 粒子系統(tǒng)相關的 component,一個舊版本的 ParticleSystemSharp,一個新版本的 InfinityParticleSystem,在轉移完成后,可以刪除舊版本的 ParticleSystemSharp。
我們在這個版本仍然保留舊版本的 component,是為了保留舊版本下的序列化信息,方便做 converter。待完成了 converter 后,舊版本就不再有意義。
后續(xù)更新中,我們會刪除 ParticleSystemSharp 這個 component。
Known issues
1.Converter 腳本使用時,如 game object 的名字中帶有如"/"、"\\"等符號,會導致文件路徑識別錯誤,請開發(fā)者在使用時注意。
2.Shader 的轉化問題仍然存在,部分 Shader 需要用戶手動轉化
這部分可以參考之前 Infinity 發(fā)布時對 Shader 的說明:遷移粒子系統(tǒng)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引擎動向,學習進階開發(fā)技能
每一個“點贊”、“在看”,都是我們前進的動力
![]()
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務。
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.