問題描述
比較詭異的問題,美術同學給過來的特效資源,在Edtior里是正常播放的,但打包后特效里應該落下來的光柱卻消失了,
問題分析
考慮到打包后的環境和Editor環境的區別
- AssetBundle
通過在Editor里加載AssetBundle來播放,發現也是正常的,應該不是資源問題, - ParticleSystem的Culling Mode
粒子系統和Animator一樣,默認是不在鏡頭內就不模擬的,由于光柱效果是從遠處落下的,考慮有可能其落下位置是在鏡頭外導致了粒子效果沒模擬,那為什么在Editor里是正常呢?因為Editor里可能會被Scene界面的鏡頭看到而觸發了模擬(之前就試過在Animator踩過這個坑),
通過把相關粒子效果的Culling Mode都改成Always Simulate,再打包,發現問題沒解決,, - IL2CPP裁剪
通過檢查特效,發現里面用到了Timeline,而出現的光柱是通過Control Track里的Control Activation控制的,通過問答1和問答2發現這是官方的一個bug,IL2CPP裁剪時沒有兼容AB包里用到的Timeline功能,導致各種被裁剪,關鍵是運行時也不報錯,,,
解決方案
上面提到的問答里也說到了解決辦法,但不是每個都有效,
- 通過把Timeline的package放在專案里,然后加
[Preserve]標簽明顯是落后的辦法,應該用link.xml, - 簡單地通過在
link.xml里加入下面配置,可以解決這個問題,
<assembly fullname="Unity.Timeline" preserve="all"/>
- 如果覺得preserve整個Assembly太浪費了,可以先記錄下資源里用到Timeline的哪些類,然后通過ILSpy等工具查看其是否被裁剪了,然后對應加到
link.xml里,但這個比較麻煩,我試過簡單加上ActtivationTrack和SignalReceiver也不行,所以還是要仔細比對, - 通過做一個簡單的Timeline資源,里面用到被裁剪的特性,然后把這個資源放在一個會被打包的Scene里(這個Scene不能放在AssetBundle),這樣IL2CPP就能正確裁剪代碼,(實測可行)
本文來自博客園,作者:agoo做獨立游戲,轉載請注明原文鏈接:https://www.cnblogs.com/agoo-indie/p/16775144.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/513052.html
標籤:其他
