SpriteStudio / SS5PlayerForUnity

OPTPiX SpriteStudio 5 Player for Unity

Home Page:http://www.webtech.co.jp/spritestudio/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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を使用しています。

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

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

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

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