問題描述
開發環境是Unity 2019.4版本
粒子特效在Editor下顯示沒有問題,打包后大部分的粒子特效都沒問題,但少量粒子特效里的Mesh沒有顯示,
同時出問題的粒子特效會報下面的Warning
No mesh data available for mesh Plane002 on particle system dg2 (4). Make sure Read/Write Enabled is set in the importer to work on the particle system renderer
問題分析
通過打開Mesh的Read/Write Enabled,問題可以解決,但為什么其他的粒子特效就OK呢?專案中很多粒子特效用到的Mesh也沒有打開Read/Write Enabled,
Editor和打包后的環境最大的不同是,打包后是加載的AB包來實體化粒子特效的,通過直接在Editor里加載打包后的AB包測驗,確定就是AB包的問題,
通過分析出問題和沒出問題的粒子特效所在的AB包,發現沒出問題的粒子特效,其Mesh是和粒子系統是打在同一個AB包里的,而出問題的那些粒子特效,其Mesh是獨立打成AB包的,問題可能就是出在這里,
在Unity的論壇里找到答案,原因是Unity在Build的時候會自動把粒子系統關聯的Mesh打開其Read/Write Enabled設定,但如果粒子系統和其關聯的Mesh被分開打AB包了,Unity則無法獲取這個依賴,從而無法自動打開Read/Write Enabled,所以需要手動設定,
解決方案
看具體專案,解決方案有很多,可以確保粒子系統和其Mesh都打在同一個AB包中,也可以手動把出問題Mesh的Read/Write Enabled打開,
由于我現在的專案,AB包是通過依賴分析自動生成的,所以無法保證粒子系統和其Mesh都打在同一個AB包中,還好專案的資源比較規范,粒子系統用到的Mesh都放在同一個檔案夾下,只要寫一個AssetPostprocessor就可以確保所有Mesh的Read/Write Enabled都打開,簡單的例子如下:
class ParticleSystemModelPostprocessor : AssetPostprocessor
{
private void OnPreprocessModel()
{
// 只處理粒子特效的Mesh
if (assetPath.StartWith("Assets/Res/PS/Model")) {
var importer = assetImporter as ModelImporter;
importer.isReadable = true;
}
}
}
本文來自博客園,作者:agoo做獨立游戲,轉載請注明原文鏈接:https://www.cnblogs.com/agoo-indie/p/16768218.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/511052.html
標籤:其他
上一篇:哈夫曼編碼
