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 + " シェーダーが見つかりません。");
}
}
コメントを残す