0 支持
530 閲覧
(280 ポイント) 要望

アニメーションの遷移にコールバックのFunctionPlayEndを使用していて不自然になっている箇所をTrackTransitionで滑らかな遷移に改善しようとしたが、遷移前のアニメ(マスタ)が停止扱いになってしまっているのでトランジションが使えない。すごく不便です。

このページをシェアする

回答 2

0 支持
(11.3k ポイント)

こんにちは。ウェブテクノロジ 瀬良です。

こちらは何に対してのご質問でしょうか?

ヘルプセンターに掲載している

複数のsspjをUnity上で連続再生するhttps://www.webtech.co.jp/help/ja/spritestudio/guide/output6/unity_continuous_play/

のソースコードに対してのご指摘かと推測しましたが
その旨記載されておりませんので、判断いたしかねる状況でございます。

お手数ではございますが、ご指摘の際には何に対してのご指摘かを記載いただけますと助かります。

ご質問・ご要望いただく際には、ご利用の環境も一緒にお知らせいただけますと幸いです。

  • ご利用のSpriteStudioのバージョン
  • ご使用のOS
  • SpriteStudio6Playerに関するご質問の場合、ご利用のPlayerと使用しているバージョン
  • 使用しているゲームエンジンのバージョン

何卒よろしくお願いいたします。

0 支持
(4.9k ポイント)
編集

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

SS6Player for Unity担当です。

ご質問の内容から、SS6Player for Unityの件と仮定して回答いたします。

ご要望の件(マスタトラックが停止状態でもアニメーション遷移を行うこと)は、現時点でも行えるはずです。

お手元でどのような順序で遷移を管理されているか不明なので、漠然とした内容となりますが……。

1.TrackTransitionの第4引数(flagCancelPauseAfterTransition)にtrueを指定する。

2.アニメーション遷移を開始する際に、再生されているアニメーション遷移がある場合にはアニメーション遷移を停止してから、新しいアニメーション遷移を指定する。

のどちらかで可能なはずです。


TrackTransition関数の解説はこちらにございます。

https://github.com/SpriteStudio/SS6PlayerForUnity/wiki/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9%EF%BC%88%5BRoot%5D%E3%83%88%E3%83%A9%E3%83%83%E3%82%AF%EF%BC%89#Function-TrackTransition


まず、

遷移前のアニメ(マスタ)が停止扱いになってしまっているのでトランジションが使えない

という点については、そのような仕様はございませんので、ご注意下さいますようお願いいたします。

近い仕様があるのは(上記の2に該当するような)現在同じマスタトラックで別のアニメーション遷移が動作している場合には、エラーとなります。


1の方法は、アニメーション遷移が終了した時に、スレーブトラックの再生状態をそのままマスタトラックで引き継ぐという指定です。

※正確には、マスタが再生一時停止ないしは停止していた時に、アニメーション遷移が終了してアニメーションをスレーブから引き継いだ後に、マスタの再生状態を再生状態に復帰する……という指定です(意図的にマスタを一時停止状態にしておきたい場合などには本指定をfalseにすることで、アニメーション遷移終了時に停止状態を維持することが可能です)。

マスタが停止している場合、スレーブのアニメーションに遷移した場合にはそのままスレーブ側で指定したアニメーションを再生続行する(アニメーションからアニメーションへ遷移したい)ことが大半だと思いますので、こちらの指定で大丈夫だと思います。


2については

マスタが停止状態でTranckTransitionのflagCancelPauseAfterTransitionをfalseにしていた場合、遷移が終了してもマスタは再生状態にならないため、状態を安定保全するために遷移が終了してもアニメーション遷移は続行状態になります(スレーブ側は遷移処理から解放されず・アニメーションがブレンドされつづける状態)。

flagCancelPauseAfterTransitionがfalseでマスタが停止状態だった場合、遷移が終了してもアニメーション再生状態を引き継ぐことができないため、アニメーション遷移が終了した段階で一時停止しているのと似た状態になっている……とご解釈ください。

そのため、もし新しいトランジションを行いなおす場合、一度現在のアニメーション遷移をキャンセルするようにしてください。

具体的には下記の処理で行えるはずです。

if(ScriptRoot.IndexGetTrackSlave(マスタトラック番号) >= 0) {

  /* 条件が成立した場合アニメーション遷移をキャンセルする */

  ScriptRoot.TrackTransition(

    マスタトラック番号,

    -1, /* アニメーション遷移のキャンセル指定 */

    遷移時間,

    false

  );

}

(上記停止処理が終了してから新しいアニメーション遷移をTrackTransition関数で指定してください)

※ScriptRootはScript_SpriteStudio6_Rootのインスタンス(実体)への参照とします。

※アニメーション遷移をキャンセルした場合、元々指定されていたアニメーション遷移は「なかった」ことになりますため、アニメーションの状態が(元のアニメーション遷移前の状態に)巻き戻ったりしますので、その点についてはご注意ください。


また、アニメーション遷移の終了をコールバックで取得しようした場合は、「アニメーション再生終了」コールバックではなく「トラック再生終了」コールバックでしか取得できませんので、その旨ご注意ください。


アニメーション遷移のサンプルとしては、サンプルの「Doll」シーンの

Script_Sample_DollRun.cs

(Assets/SpriteStudio6Sample/Doll/Script/Script_Sample_DollRun.cs)

が該当すると思います。

※サンプルがない場合、SS6Player for UnityのGitHub

https://github.com/SpriteStudio/SS6PlayerForUnity

のsampledevelopブランチを取得することでサンプルも取得することが可能です。


以上となります。

また、最後に、弊社瀬良からの返信にございます通り、ご利用の環境や対象とするプレーヤーのプラットフォーム(UnityやUE4・WebPlayerなど)をいただけますようお願いいたします。

そうしませんと、回答したくても、ご質問やご要望が何を対象にしているのか理解できない場合がございますため、回答できない場合が多々生じてしまいますので、何卒ご理解の程お願い申し上げます。

今後とも何卒よろしくお願いいたします。

...