SpriteStudio / SS5PlayerForUnity

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

同じssae 内の別のアニメに属するユーザーデータがコールバックされる #76

Closed SpriteStudio closed 9 years ago

SpriteStudio commented 9 years ago
test.ssae
  anime_1   どこかのパーツにユーザーデータのキーあり 整数値:1
  anime_2   どこかのパーツにユーザーデータのキーあり 整数値:2
  anime_3   どこかのパーツにユーザーデータのキーあり 整数値:3

SsRootPart.AnimationStop(); // 停止
SsRootPart.FunctionUserData += OnUserData; // コールバック指定
SsRootPart.AnimationPlay(2,1); // anime_3 のみ再生

void OnUserData(...int AnimationNo...Library_SpriteStudio.KeyFrame.ValueUser.Data Data...)
{
  // 問題
  //3回呼ばれる。
  // Data.NumberInt には 1, 2, 3 が入っているのでanime_1, anime_2 が呼ばれているように見える。
  // なお、AnimationNo には常に2( anime_3 を示す)が入っている
}

テストデータあります。

SpriteStudio commented 9 years ago

ba77cf0c77a9c79d7577670ad832c8bf6c093226 にて下記ケースを除いて解消。 ※「Pingpong再生の逆再生時」に、再生速度を(大体)6.0以上位に設定するとコールバックの回数がおかしくなる(ループ分単位で抜ける。フレームスキップ処理のバグ)。 ※1~3程度の速度倍率では殆ど症状が出ないと思われます。

MasamiYitsuse commented 9 years ago

コミット: 7d73363cabe4875abbce3b415a8aa70ee5dd32ba [7d73363] にて、「ピンポン再生+逆再生+高速再生」時にフレームスキップ分のコールバックがおかしくなる点についても解消しました。 また、若干「ピンポン再生+正方向再生」時のフレームスキップ時のコールバックの処理も若干修正しました。

具体的なバージョン名としては、「Ver.1.1.12」以降のバージョンで対応済案件となります。

DKAlpha commented 9 years ago

SsRootPart.AnimationStop(); // 停止 SsRootPart.FunctionUserData += OnUserData; // コールバック指定 SsRootPart.AnimationPlay(2,1); // anime_3 のみ再生

上のコードを実行すると、日本語コメントの影響でコードが正しく解釈されなくなり、再生していないアニメのユーザーが取得される現象を確認しています。 再生していないアニメのユーザーデータが取得されてしまう場合は、日本語コメントの部分を ・日本語コメントを消す ・最後に半角スペースを付加する ・行間に改行を挿入する などで意図した動作になる場合がある事を補足します。

MasamiYitsuse commented 9 years ago

上記補足です。

「//」で日本語注釈を入れた場合、MonoDevelop+Unityの場合、末尾に「.」(半角ピリオド)を入れると、解消できる場合が少なくないことを付記させて頂きます。

また、それでもどうしてもおかしな挙動をする場合、MonoDevelopからC#のソース(大半はテキストファイルと共通設定になっていると思いますが)の改行設定を「Microsoft Windows」(CR+LF)に変更して、全ソースをセーブしなおしてみることを推奨いたします。