SpriteStudio / SS5PlayerForUnity

OPTPiX SpriteStudio 5 Player for Unity
http://www.webtech.co.jp/spritestudio/
MIT License
39 stars 15 forks source link

v1.3.9 AssetBundleにするとシェーダーの参照が壊れる #176

Open halfwele opened 8 years ago

halfwele commented 8 years ago

お世話になっております。 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」に「SpriteSpriteStudio〜.shader」のシェーダは定義済みです。 import時のNaming Assetsも試しました。 Unity 5.3.4を使用しています。

左側のピンクがAssetBundleからInstantiateした状態です。 sprite sprite2

MasamiYitsuse commented 8 years ago

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へのバージョンアップなどは詳細検証の後に、アップデートいたします。

お忙しい中お手数とは存じますが、何卒ご検討下さいますと幸いです。

halfwele commented 8 years ago

お返事ありがとうございます。 void Awake() { var root = gameObject.GetComponent(); foreach(var MaterialNow in root.TableMaterial) { MaterialNow.shader = Shader.Find(MaterialNow.shader.name); } } を追加したところ正常に動作しました。 迅速な対応ありがとうございました。

MasamiYitsuse commented 8 years ago

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);
    }
}

の記述を追記した形となっています。

何卒今後とも宜しくお願い致します。