SpriteStudio / SS5PlayerForUnity

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

スクリプト[Script_SpriteStudio_ManagerDraw]の[LateUpdate]が実行された時の、[GC Alloc]に関しまして #213

Open RyohTazaki opened 6 years ago

RyohTazaki commented 6 years ago

使用バージョン:SS5Player For Unity v1.6.0

お世話になっております。

スクリプト[Script_SpriteStudio_ManagerDraw]の[LateUpdate]が実行された時の、[GC Alloc]に関しまして質問したい内容がございます。 スクリプト[Script_SpriteStudio_ManagerDraw]の[LateUpdate]で実行されている関数[MeshCreate]でございますが、異なるマテリアルを参照したオブジェクト同士の描画順が変更された際に[GC Alloc]が発生しております。

1.マテリアルAを参照している[Script_SpriteStudio_Root]を生成(Instantiate)し、z座標を(1)に設定 2.マテリアルBを参照している[Script_SpriteStudio_Root]を生成し、z座標を(0)に設定 →[2.]の時点までは、[View (Manager-Draw)]の[Mesh Renderer]のマテリアル数は[2]

3.マテリアルAを参照している[Script_SpriteStudio_Root]を生成し、z座標を(-1)に設定、[2.]で描画したオブジェクトよりも手前に表示 →[3.]の時点で、[View (Manager-Draw)]の[Mesh Renderer]のマテリアル数は[3]に変化し、[GC Alloc]が発生します。

恐らく描画順が変更された際に、スクリプト[Library_SpriteStudio]の関数[MeshCreate]内の処理

if(InstanceMaterialWrite == null || InstanceMaterialWrite.Length != CountMaterial) { InstanceMaterialWrite = new Material[CountMaterial]; }

が実行されることによって、[GC Alloc]が発生していると考えられます。

また、描画順が変化しない場合であっても、不定期に[Script_SpriteStudio_ManagerDraw]の[LateUpdate]で[GC Alloc]が発生致します(再生するアニメーションの切り替え処理なども行なっておりません)。

お手数をお掛けしますが、異なるマテリアルを参照したオブジェクト同士の描画順が変更された際も[GC Alloc]が発生しない方法や本現象が修正されたバージョンなどがございましたら、ご教示いただけますと幸いです。

以上でございます。 ご確認のほど、よろしくお願いいたします。 失礼いたします。

MasamiYitsuse commented 6 years ago

RyohTazaki 様

お世話になっております。

まず現状、SS5PUについては、 ・Ver.1.6.0 ・Ver.1.5.17 の2バージョンから更新されたバージョンは存在していません。

※補足 ご存知とは存じますが、Ver.1.5.17とVer.1.6.0の差異については、今回ご質問のあった描画マネージャ(Script_SpriteStudio_ManagerDraw)の振る舞いが異なる以外の差異はありません(大根底として、Unity3.57以降対応版がVer.1.5.17で、Unity5.2以降のみの対応版がVer.1.6.0という差異があります。そのため、1.5系と1.6系にバージョンブランチしている現状がございます)。 基本的に、Ver.1.5.17はメッシュの最適化にCombineMeshesを使用する方法で、Ver.1.6.0については同関数を使用せずに自前でコンバインするという点が異なっています。 そのため、導かれる描画結果は同等ですが、描画マネージャの細かな内部挙動はVer.1.5.17とVer.1.6.0で異なっています。

その上で、Ver.1.6.0で上記を回避する方法等については存在していません(明確に当方が把握していない……という意味です)が、当方でも状況を確認の上調査してみて、回避方法や修正方法など判明すれば、当Issueで返信させていただきたく思います。

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