SpriteStudio / SS5PlayerForUnity

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

v1.2.1 Import時にArgumentNullExceptionが発生 #105

Open ghost opened 9 years ago

ghost commented 9 years ago

▼報告内容 SpriteStudioのverを1.1.18から1.2.1にバージョンアップしsspjファイルを再インポートしてみたところ、 ArgumentNullExceptionが発生しImportが途中までしかできなくなりました。 ※ver.1.1.18では問題なくImport出来ます。

▼発生箇所 ・ファイル名:LibraryEditor_SpriteStudio.cs ・メソッド名:UpdateAssetMaterial ・発生行:3372行目 ・原因:keys[]の要素数とcounterTextureの値が異なっている為発生 ※TableIndexの要素数はcounterTextureと一致しているが重複している値が存在し、 重複している数を省くとkeys[]の要素数と一致している。

▼開発環境 SpriteStudio Player ver 1.2.1 SpriteStudio ver 5.3.5.5177 Unity ver 4.6.3f1

▼備考  該当sspjは別途メールにて添付致します。

DKAlpha commented 9 years ago

報告ありがとうございます。 データの方受領いたしました。 進展はこちらで報告させていただきます。

MasamiYitsuse commented 9 years ago

Katsumasa様

お世話になっております。 ご報告、有り難うございます。 できる限り早く解消するよういたします。

反映については、次リリースのマイナーバージョンアップ版(恐らくVer.1.2.3)になる可能性がありますが、Ver.1.2.1用のパッチも可能なようでしたら、こちらでそのパッチも公開したいと思います。

お忙しいなか大変申し訳ございませんが、何卒ご理解とご容赦のほどお願い申し上げます。

追伸: Ver.1.2.3では、

・1.2.1で採用された「メッシュの変形情報の事前計算での実行時高速化(データサイズを犠牲にしてCPU負荷を減らす形式)」と「1.1.18と同じ形式でデータサイズを優先して、従来のCPU負荷で描画する(データ形式自体は1.1.18と同様ですが、1.2.0から導入した、アニメーションデータ部分はScriptableObjectの別アセットして、同じプレハブを多数だした場合の使用メモリ低減に対応した形式です)」の選択インポートが可能になっている。

・幾つかのユーティリティ的な(スクリプトからの制御用の)関数が追加される

・1.2.0から発見されている幾つかのバグの修正

などのバージョンアップ内容を予定しています。

MasamiYitsuse commented 9 years ago

Katsumasa様

お世話になっております。 原因の特定ができ、現在その対応中である旨、進捗の報告を致します。

発生原因としましては、 Ver.1.2.0から導入した「マテリアル・テクスチャのインポート時」の最適化処理のバグで、 「同じセルマップ(テクスチャ)を使用している複数のssceファイルが存在している(sspj中に記録されているテクスチャファイル数とssceファイル数が異なる)場合」にこの症状が発生する場合があります。

上記にもあります通り、現在対処中ですので、具体的な解消方法についてはもう少々お待ちいただけますよう、お願い申し上げます。

MasamiYitsuse commented 9 years ago

Katsumasa様

お世話になっております。 障害の修正方法について、報告させて頂きます。

A)バージョンアップによる解決

SS5Player for UnityのGitHub上のDevelopブランチから「Ver.1.2.2 (rel.2)」をPULLしていただくことでバージョンアップして、解決することが可能です。 ※当該バージョンについては、上記の1.2.1から1.2.3へのバージョンアップ点の内、  「再生時速度(CPU負荷低減)重視方式とメモリサイズ優先方式の2種類からインポートが可能」  のみに対応した「Ver.1.2.3」の途上バージョン(ユーティリティ追加機能が実装されていないバージョン)となりますが、「1.2.1」で発見されたバグもいくらか修正されているものとなります。

また、本バージョンにバージョンアップした場合、(1.2.1から若干データ格納形式の変更がございますため)、(Ver.1.2.1への移行が済んだデータについても)データの再インポートが必要となります。 お忙しい中大変申し訳ございませんが、何卒ご理解とご容赦の程お願い申し上げます。


B)Ver.1.2.1にパッチを充てることでの解決

1.2.1にパッチを当てる方法については、下記の箇所の修正を行うことで可能かと思われます。

・箇所1 ・ファイル名:LibraryEditor_SpriteStudio.cs ・メソッド名:UpdateAssetMaterial ・該当行: 3372行目~3400行目

元リスト

                        NameAsset = String.Copy(Keys[i]);
                        if(false == FlagCreateMaterial[i])
                        {   /* Create-New */
                            if(null != MaterialInformation.SubstanceAsset)
                            {   /* Overwrite */
                                MaterialNew = MaterialInformation.SubstanceAsset;
                            }
                            else
                            {   /* Create-New */
                                /* Create Destination-Folders */
                                AssetUtility.Create.Folder(NamePathSubImportMaterial, NamePathBase);

                                /* Create new Material */
                                MaterialNew = new Material(Shader_SpriteStudioTriangleX[OperationNo]);
                                AssetDatabase.CreateAsset(MaterialNew, NameAsset);
                            }
                            TextureInformation = ListTexture[MaterialInformation.IndexTextureInformation] as InformationTexture;
                            MaterialNew.mainTexture = TextureInformation.SubstanceAsset;
                            AssetDatabase.SaveAssets();

                            TableMaterial[i] = AssetDatabase.LoadAssetAtPath(NameAsset, typeof(Material)) as Material;
                            MaterialInformation.SubstanceAsset = TableMaterial[i];
                            FlagCreateMaterial[i] = true;
                        }
                        else
                        {   /* Already Created */
                            MaterialInformation = ListMaterial[IndexMaterial] as InformationMaterial;
                            TableMaterial[i] = MaterialInformation.SubstanceAsset;
                        }

修正後

                        NameAsset = String.Copy(Keys[IndexMaterial]);
                        if(false == FlagCreateMaterial[IndexMaterial])
                        {   /* Create-New */
                            if(null != MaterialInformation.SubstanceAsset)
                            {   /* Overwrite */
                                MaterialNew = MaterialInformation.SubstanceAsset;
                            }
                            else
                            {   /* Create-New */
                                /* Create Destination-Folders */
                                AssetUtility.Create.Folder(NamePathSubImportMaterial, NamePathBase);

                                /* Create new Material */
                                MaterialNew = new Material(Shader_SpriteStudioTriangleX[OperationNo]);
                                AssetDatabase.CreateAsset(MaterialNew, NameAsset);
                            }
                            TextureInformation = ListTexture[MaterialInformation.IndexTextureInformation] as InformationTexture;
                            MaterialNew.mainTexture = TextureInformation.SubstanceAsset;
                            AssetDatabase.SaveAssets();

                            TableMaterial[i] = AssetDatabase.LoadAssetAtPath(NameAsset, typeof(Material)) as Material;
                            MaterialInformation.SubstanceAsset = TableMaterial[i];
                            FlagCreateMaterial[IndexMaterial] = true;
                        }
                        else
                        {   /* Already Created */
                            MaterialInformation = ListMaterial[IndexMaterial] as InformationMaterial;
                            TableMaterial[i] = MaterialInformation.SubstanceAsset;
                        }

・箇所2 ・ファイル名:LibraryEditor_SpriteStudio.cs ・メソッド名:PrefabUpdateCheck ・該当行: 3732行目~3373行目

元リスト

                            NamePathDataReferenced = AssetDatabase.GetAssetPath(ScriptRootOld.SpriteStudioDataReferenced);
                            ObjectDataAnimationReferenced = AssetDatabase.LoadAssetAtPath(NamePathDataReferenced, typeof(ScriptableObject)) as ScriptableObject;

修正後

                            string NamePathDataReferencedOld = AssetDatabase.GetAssetPath(ScriptRootOld.SpriteStudioDataReferenced);
                            if(false == String.IsNullOrEmpty(NamePathDataReferencedOld))
                            {
                                NamePathDataReferenced = String.Copy(NamePathDataReferencedOld);
                                ObjectDataAnimationReferenced = AssetDatabase.LoadAssetAtPath(NamePathDataReferenced, typeof(ScriptableObject)) as ScriptableObject;
                            }

となります。 もし、上記箇所のパッチ充てでコンパイルエラーが出る・正常に動作しない場合については、できればGitHubのDevelopから1.2.2(rel.2)をPULLしていただけますようお願い致します。

※1.2.2(Rel.2)は1.2.3への途上版ではありますが、1.2.1に比べ安定性が向上している他、インポート時のデータ形式を選択可能であるというメリットなども御座いますため、個人的には(1.2.1へのパッチ充てではなく)「1.2.2(rel.2)」へのバージョンアップを推奨いたします。

お忙しい中お手数をおかけして、大変申し訳ございませんが、今後とも何卒宜しくお願い致します。

DKAlpha commented 9 years ago

一点補足させていただきます。 アニメデータに含まれておりました、総フレーム1のアニメについては表示されない問題がございます。 https://github.com/SpriteStudio/SS5PlayerForUnity/issues/61 総フレーム2にするなどして回避してください。 よろしくお願いいたします。

ghost commented 9 years ago

迅速な対応ありがとうございました。 現在、1.1.18に巻き戻して作業を進めておりましたので、 後程確認してみます。