AssetBundle化したShaderが外れてしまう
あるシーンをアセットバンドル化した際に、そのシーンで使われているパーティクルが白くなってしまったので調べてみた。
調べてみるとアセットバンドル化した際に、uGUIなどのシェーダーが外れてしまうことがあるらしい。
参考)神様は有給消化中です。 | AssetBundle化したPrefabのシェーダー参照が壊れる現象
AssetBundleManagerのSimulate Modeだと再現できないけど、実際にAssetBundleを読み込んでみると再現できる。
上記のサイトを参考に、パーティクルのGameObjectに対して再度設定するコンポーネントを割り当てたら動いた。
using UnityEngine; using System.Collections; /// <summary> /// アセットバンドル化したパーティクルなどのシェーダーが外れてしまうので /// それを回避するためにAwakeにて当て込む。 /// </summary> public class ParticleShaderReset : MonoBehaviour { /// <summary> /// シェーダー。 /// </summary> [SerializeField] string shaderStr; /// <summary> /// Awake. /// </summary> void Awake() { ParticleSystem ps = this.GetComponent<ParticleSystem>(); Shader s = Shader.Find(this.shaderStr); if (s != null) ps.GetComponent<Renderer>().sharedMaterial.shader = s; else Debug.LogWarning(this.shaderStr + " シェーダーが見つかりません。"); } }
コメントを残す