上周四发现,在unity的Game view 里面和build之后的游戏节目显示效果表现不一样,在unity 的Game view 里面粒子效果显示正常,但是build完之后粒子不显示了。
开始怀疑是shader的原因,于是用 renderdoc(FamgDebug 也可以)查看,发现压根就没渲染于是排除shader渲染方面的原因。于是查看代码,查了半天发现也没问题.(这里范了个错误,如果代码有问题在代码层面Game view 里面也应该会有问题),于是把粒子还原为原来对应的assetbundle ,发现竟然显示出来看了。于是还原老的粒子prefab与新的prefab进行比较发现两处不同。
1.发现两个refab引用的材质shader不同
2.粒子的simulation space 不一样
于是既查看shader,又修改粒子的simulation space。折腾了一天发现没解决。后来google发现有人说是unity bug ,粒子如果出生的时候不是在摄像机的可视范围内就会被裁剪掉,因此有人说把粒子生成位置放在摄像机前面,距离大概为5实验不行。于是各种修改测试也没解决问题。于是就想到问题出在材质上面了,就是就各种查看,终于在https://issuetracker.unity3d.com/issues/asset-bundle-particle-system-using-a-mesh-in-another-bundle-is-not-visible 上面算是眼前一亮发现还真是的 粒子系统bundle 依赖了一个外部的模型资源,该模型资源的read/write enable 处于未选中状态。于是就有了两种推断:
1.当粒子系统引用外部资源的时候,外部资源的fbx模型的read/write 要设置为enabled
2 如果例子引用的所有资源打包进同一个bundle中的时候,如果这些引用中有模型的话,不管这个模型的read/write 是否enabled都可以。
持着怀疑的态度,先把该粒子的所有资源打成一个bundle资源,重新进游戏发现粒子显示出来了.推论2 已经得到证明
后来又把粒子和它因引用的资源分开打,发现必须把粒子依赖的外部资源的read/write 设置为enabled才可以 推断1 也得到了证明