v1.3.9 AssetBundleにするとシェーダーの参照が壊れる
halfwele opened this issue · comments
お世話になっております。
AssetBundle化してInstantiateしますとBased-Material Table内のShaderの参照が壊れてしまいます。
(MIX~MUL内のParameter類は全て0の表示になっております。)
ShaderのCustom/SpriteStudio5/Mix~MULを設定しなおすと正しく表示されます。
v1.2系では同じ方法で問題なく動作していた為悩んでおります。
お手数ですが、どうぞよろしくお願いいたします。
【環境】
BuildAssetBundleOptionsは以下の2種類を使用しましたがいずれも同じ結果です。
BuildAssetBundleOptions.DeterministicAssetBundle;
[Edit]-[Project Settings]-[Graphics]内の「Always Included Shaders」に「Sprite_SpriteStudio_〜.shader」のシェーダは定義済みです。
import時のNaming Assetsも試しました。
Unity 5.3.4を使用しています。
halfwele様
お世話になっております。
レポートありがとうございます。
頂いた件について、調査いたします。
※初見印象として、ビルド後の実行状態の中にシェーダが未格納になってしまっており・シェーダを見失っているために起こっている現象かと思われます。
取り急ぎ、未検証で申し訳ございませんが、
Script_SpriteStudio_Root.csに下記追記をしてみていただけませんでしょうか?
(SS5PU Ver.1.2系の初期化処理の一部をコピーしてきたままではありますが)
void Awake()
{
var root = gameObject.GetComponent<Script_SpriteStudio_Root>();
foreach(var MaterialNow in root.TableMaterial)
{
MaterialNow.shader = Shader.Find(MaterialNow.shader.name);
}
}
※SS5PUの1.3系では、上記スクリプトのAwakeは、最新版でもオーバーライドしていない状態になっております(オーバーライドでの空関数記述を注釈化してあるはずです)。
また、Unityのプロジェクト上で[Edit]-[Project Setting]-[Graphic]の中の
「Always Included Shaders」に、
・Sprite_SpriteStudio_Mix/Add/Sub/Mul
・Particle_SpriteStudio_Mix/Add/Add2
の7つのシェーダを含めてみて下さい。
※「Shader Preloading」の中にも加えていただけますと、さらに安全かと思われます。
GitHubへのバージョンアップなどは詳細検証の後に、アップデートいたします。
お忙しい中お手数とは存じますが、何卒ご検討下さいますと幸いです。
お返事ありがとうございます。
void Awake()
{
var root = gameObject.GetComponent<Script_SpriteStudio_Root>();
foreach(var MaterialNow in root.TableMaterial)
{
MaterialNow.shader = Shader.Find(MaterialNow.shader.name);
}
}
を追加したところ正常に動作しました。
迅速な対応ありがとうございました。
halfwele様
ご検証とご報告有難うございます。
正常に動作されたようで安堵しております。
また、未検証状態での対処案で大変申し訳ございませんでした。
一応当方でも検証後、上記変更を正式に記載したものをVer.1.3.12として、developブランチにアップいたしました。
具体的な変更点としては、
Script_SpriteStudio_Root.csとScript_SpriteStudio_RootEffect.csに
void Awake()
{
foreach(Material MaterialNow in TableMaterial)
{
MaterialNow.shader = Shader.Find(MaterialNow.shader.name);
}
}
の記述を追記した形となっています。
何卒今後とも宜しくお願い致します。