SpriteStudio / SS5PlayerForUnity

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

AnimationDataCell.Lengthが0になってしまう #68

Closed dopamania closed 9 years ago

dopamania commented 9 years ago

いくつかのsspjファイルで試してみたのですが

Material MaterialNow = ScriptRoot.MaterialGet(AnimationDataCell[FrameNo].DataBody.TextureNo, KindBlendTarget);

AnimationDataCell.Lengthが0のものがあるせいか、 全上記の箇所で IndexOutOfRangeException: Array index is out of range. このようなエラーが出てしまいます。

これはsspjファイルの作り方に問題があるのでしょうか? 回避方法を教えていただきたいです。

ちなみにインポートは正常に行うことができており、 シーンに配置して再生すると発生します。

MasamiYitsuse commented 9 years ago

まず一点ご確認いただきたい点がございます。

・SS上でのアニメーションデータのパーツの設定が「通常」になっていて、「参照セル」のアトリビュートが設定されていないパーツはありませんでしょうか?

もし特段の理由がない場合、「スプライトを表示する必要がないパーツ」はパーツ設定を「NULL」にすることを推奨いたします(「NULL」パーツは、「表示スプライトを持たない、パラメータ群だけのパーツ」を意味しまして、その子パーツとして「通常」パーツなどをつけることで、主に関節構造などを作成する際に使用されます)。 パーツの種類が「通常」になっていると、SS5Player for Unityは「スプライトを表示するためのパーツ」と認識しますが、その場合スプライトの画像の基準となる参照セルの情報を取得しようとします(その際に、参照セルの設定が行われていない場合、本症状が出ます)。

AnimationDataCell.Lengthが0ということは、そのパーツに参照セルの設定が存在しないことを意味します。 その上で、AnimationDataCell.Lengthが0であるということは、恐らくそのパーツは「スプライトを表示する必要がない」パーツだと思われますので、「NULL」パーツにしていただいた方が、実行速度的にも若干高速になります。

まずは、その点をご確認いただけますと助かります。 (スクリプトのコードを修正して回避する方法を提供することは可能ですが、修正箇所が若干複雑になる可能性が低くないのですが、もしスクリプトの修正方法をご要望の場合、その旨頂けますと助かります)

dopamania commented 9 years ago

回答ありがとうございます。 ご指摘の通り、参照セルのアトリビュートが設定されていないものがありました。 こちらの作成の問題によるものでしたので、 スクリプトの修正については要望しないということでお願いします。

ありがとうございました。