SpriteStudio / SS5PlayerForUnity

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

インスタンスの再生回数が1回の時でもループする #52

Closed SpriteStudio closed 9 years ago

SpriteStudio commented 9 years ago

現象

Issue52 内の sspj に含まれる Layout_Label.ssae を再生した時に、 hazure_left_in_down:moji05 インスタンスの再生は、 SS5 本体では1回で終わりますが、プレイヤー側は先頭に戻ってループします。

  1. インスタンスキーが無い場合
  2. インスタンスキーが先頭にある場合
  3. インスタンスキーが20フレーム目にある場合 の3パターンのアニメが入っていますがいずれも、先頭に戻っているようです。 ご確認よろしくお願いしますー
MasamiYitsuse commented 9 years ago

一応修正いたしました。 また、インスタンス呼出側のアニメが終了した場合に従属しているインスタンスアニメーションも停止するように修正しました。

コミット: ae93bd160ae00620342588fe6528829f43c69ba3 [ae93bd1]

ただし、(現状分かっている範囲で)一点、SS上のプレビューと異なる挙動があります。 具体的には下記の質問の状況下において、インスタンスがループしてしまいます。


一点インスタンスの再生で質問がございます。

・インスタンス呼出側(親)にインスタンスアトリビュート(インスタンスの再生状態の設定)がない ・親のアニメーションの尺が、子のアニメーションの尺より長い

状況において、呼び出されているインスタンス(子)のアニメーションの再生仕様をご教示下さい。

といいますのも

・「Issue52/20140925_191228_Instance_loop/Animal/NewProject.sspj」のLayout_Label.ssae内00_no_instance_keyのアニメデータでは、親のアニメーションが終了するまで、子はループしていないように見受けられます。

一方 ・「InstanceTestData/利用データ/@INSTANCE_4.sspj」のデータでは、親のアニメーションが終了しなくても、子は自分のアニメーション尺が終わると即ループしています。

この2つのデータを見比べた場合に、双方ともインスタンスの再生アトリビュートの設定がない状態で、データ指定的には「同じ」に見えるのですが、挙動は明らかに相反しているように思えます。

この2つは、どのような差・判別方法で、挙動が分かれているのでしょうか? 詳細仕様をご教示頂けますようお願い致します。

また、他にインスタンス再生での、特殊な仕様(ルール)が他にありましたら、そちらもご教示頂けますと助かります。

Kurooka commented 9 years ago

まず、結論からこのデータは作りが全く違うデータです。

インスタンスキーが無い場合の挙動ですが、インスタンスキーの初期値が使用されます。 ざっくりな説明としてはループ回数は1、オプション類チェックなし、再生速度等倍、最初から最後まで再生という状態になります。 (細かくはSDKのCommon/Loader/sstypes.hのSsInstanceAttrを参照ください。)

それぞれのデータを見ての挙動の解説ですが、 Issue52/20140925_191228_Instance_loop/Animal/NewProject.sspjでは、インスタンスのキーがありません。 そのためインスタンスアニメ自体は上記の再生となります。 そしてインスタンス再生の元アニメの最終フレームは71 親が121、初期値なので無限ループなし、ループ回数1回ということで、インスタンスアニメの再生は親のアニメの71フレーム目で終了する。 (完全に並列再生) 親がループを開始した際は、もう一度1から再生されるという表示となります。

mi28は、メインローター、テールロータ共々、インスタンスにキーがあり無限ループが設定されています。 ボディのみインスタンスのキーが設定されておらず、ボディがアニメーションしているように見えるのは このアニメのルートパーツ下のNULLパーツの作用によるものです。

また、mi28_instance_dekiagariのアニメは mi28とフレームが同等となり、mi28のアニメの終了=mi28_instance_dekiagariの終了タイミングと一致し親と同時にもう一度ループが開始されます。 ですので、mi28_instance_dekiagariでキーフレームが無いですが、これは上記の初期値通り一回再生となります。

MasamiYitsuse commented 9 years ago

詳細仕様ありがとうございました。

コミット: c0c00a66bba9c35b8e07a3d3328ef32e9c1c6be1 [c0c00a6]

で対応いたしました。 ご査収のほどお願い致します。 ※インスタンスを使用したデータの再インポートが必要です。

SpriteStudio commented 9 years ago

修正を確認しました。