AssetBundle化したShaderが外れてしまう


あるシーンをアセットバンドル化した際に、そのシーンで使われているパーティクルが白くなってしまったので調べてみた。
調べてみるとアセットバンドル化した際に、uGUIなどのシェーダーが外れてしまうことがあるらしい。

参考)神様は有給消化中です。 | AssetBundle化したPrefabのシェーダー参照が壊れる現象

AssetBundleManagerのSimulate Modeだと再現できないけど、実際にAssetBundleを読み込んでみると再現できる。

上記のサイトを参考に、パーティクルのGameObjectに対して再度設定するコンポーネントを割り当てたら動いた。

[unitycsharp]
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 + " シェーダーが見つかりません。");
}
}
[/unitycsharp]

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です