スクリプトリファレンス([Root]トラック) - SpriteStudio/SS6PlayerForUnity GitHub Wiki
SS6Player for Unity(以降「SS6PU」)のアニメーション制御用クラス(Script_SpriteStudio6_Root)の再生トラック管理関係の機能群のスクリプトリファレンスです。
再生状態を取得
関数(動的)
bool StatusGetPlay(int indexTrack)
引数
- indexTrack : トラック番号
返値
true ... 再生状態
false ... エラー / 停止状態
解説
再生トラックがアニメーションを再生しているかを取得します。
具体的には、AnimationPlayが行われた後に、アニメーションが終了するか・AnimationStopされるまでの間であるか……となります。
indexTrackは、0オリジンのトラック番号で、現状の最大数はCountGetTrack関数で取得可能です(ですので、トラック番号は「0 ~ CountGetTrack-1」の値をとります)。
indexTrackに「-1」を指定すると、アニメーションオブジェクトそのものが再生状態にあるかを取得します。
同種のプロパティに「(アニメーションオブジェクトとトラック制御にそれぞれ)StatusIsPlaying」がありますが、これらのプロパティは使用しないでください(内部処理用なので、仕様が予告なく変更されることがあります)。
一時停止状態を取得
関数(動的)
bool StatusGetPause(int indexTrack)
引数
- indexTrack : トラック番号
返値
true ... 一時停止状態
false ... エラー / 一時停止していない / 再生状態にない
解説
再生トラックがアニメーションを(再生中かつ)一時停止状態であるかを取得します。
indexTrackは、0オリジンのトラック番号で、現状の最大数はCountGetTrack関数で取得可能です(ですので、トラック番号は「0 ~ CountGetTrack-1」の値をとります)。
indexTrackに「-1」を指定すると、「全ての再生しているトラックが一時停止状態」である場合にtrueを返します(この状態をアニメーション全体が一時停止状態だと解釈します。トランジション中であっても全ての再生状態のトラックが一時停止であればアニメーション全体が一時停止と解釈します)。
同種のプロパティに「(トラック制御の)StatusIsPause」がありますが、このプロパティは使用しないでください(内部処理用なので、仕様が予告なく変更されることがあります)。
再生トラック数の取得
関数(動的)
int CountGetTrack()
引数
返値
トラック数
-1 ... 失敗(エラー)
解説
現在の再生トラック数を取得します。
アニメーションの再生管理は再生トラックで行われるため、再生トラック数は同時に再生管理できるアニメーションの最大数とほぼ同義になります。
再生トラック数の変更
関数(動的)
bool TrackReboot(int count)
引数
- count : トラック数
返値
true ... 成功
false ... 失敗(エラー)
解説
現在の再生トラック数を変更します。
countに0以下の値を与えないでください(明確にトラック数を指定する必要があります)。
もし、現在のトラック数とcountが同じなら、本関数は何も変更しません。
また、変更前の再生管理情報なども持ち越されますが、トラック数が増減した場合は下記の動作特性があります。
- トラックが増えた場合
増えた分のトラックは停止状態になっており、増えたトラックに割り当たっているパーツは存在しません。 - トラックが減った場合
減った分のトラックの情報は消失し(再生していたアニメーションの情報も消失します)、消失したトラックに接続されていたパーツは「どのトラックにも割り当たっていない状態(どの再生中アニメーションも反映しない)」になります。 ただし、消失したトラックに接続されていたパーツをそのまま未割当のままにすることは、アニメーションの最終結果が不安定になりがちですので、推奨しません(なるだけ速やかに再割当を行ってください)。
また、トラックが増減する時は必ず「トラック及びそれに関連する情報群のワークエリアの再取得と状態以降の処理が発生する」ため、頻繁にトラック数の増減を行うことは推奨しません(そのような運用の有用性は非常に乏しいといわざるを得ず、デメリットのみが現出することになるはずです)。
原則、「初期設置時などに必要十分なトラック数を確保する」ことを推奨します。
再生トラックをパーツに接続
関数(動的)
bool TrackConnectParts(
int idParts,
int indexTrack,
bool flagChildParts = false
)
引数
- idParts : パーツID
- indexTrack : トラック番号
- flagChildParts : 子パーツの扱い
返値
true ... 成功
false ... 失敗(エラー)
解説
指定パーツに、指定トラックの再生アニメーションを反映するように設定します。
この機能を使用することで、1つのアニメーションオブジェクトに対して、複数のアニメーションを合成して反映することができます。
1つのパーツに指定することができる再生トラックは、常に1つになります(トラックトランジション中のみが例外)。
idPartに「-1」を設定すると、全てのパーツに対してindexTrackを設定します(「idPart=0・flagChildParts=true」と同じ動作を行います)。
パーツIDは、IDGetParts関数で取得してください。
indexTrackは「0 ~ CountGetTrack-1」の値である必要があります(0オリジンの番号です)。
flagChildPartsは、「true時はidPartsの子パーツにもindexTrackを設定」「false時はidPartsのみにindexTrackを設定」の動作となります。
他のアニメーションから呼び出されているインスタンスアニメーション(子アニメーション)への設定を行った場合の正常動作は保証しません(仕様範囲外の運用です。親アニメーションのインスタンス「パーツ」までが正常動作保証範囲です)。
無理をすればインスタンスアニメーションの各パーツへの設定を行うことは可能(許容するという意味ではなく、「(関数群を組み合わせれば)不可能ではない」という意味)ですが、インスタンスアニメーションは「親アニメーションから制御される」前提のものですので、その制御から外れたインスタンスアニメーションのパーツ群がどのような振る舞いをするかについては「不定」が仕様です(また、親のアニメーションからの制御も子アニメーションが複数トラックで親パーツ以外からも制御されることは仕様範疇にしていません)。
トラックトランジション開始
関数(動的)
bool TrackTransition(
int indexTrack,
int indexTrackSlave,
float time,
bool flagCancelPauseAfterTransition
)
引数
- indexTrack : トラック番号(マスタ)
- indexTrackSlave: トラック番号(スレーブ)
- time: 遷移時間
- flagCancelPauseAfterTransition: 遷移後の一時停止状態の扱い
返値
true ... 成功
false ... 失敗(エラー)
解説
トラックトランジション(アニメーションのクロスフェード)を開始します。
indexTrack(マスタトラック)のアニメーションに対して、indexTrackSlave(スレーブトラック)のアニメーションを、時間経過に比例してブレンドしながら遷移(トランジション)します。
移行はtime秒で終了し、移行後はスレーブでの再生状況はそのままマスタに移行し・スレーブは未再生状態になります(その時点で、直前までのマスタの再生状況は廃棄されます)。
すでにトランジション状態にあるマスタトラックに対して「2つ目のスレーブトラックを指定(多重トランジション)」を行うことはできません(常にマスタとスレーブは一対一の関係である必要があります)。
また、スレーブトラックに対して、別のトラックをスレーブに指定することもできません(多段トランジションも行うことはできません)。
ただし、複数のトランジションを同時に実行することは可能です。
※例えば、「1がマスタで2がスレーブ」のトランジションと・「3がマスタで0がスレーブ」のトランジションは同時に実行することは可能です。その場合には、表示状態としては「1のパーツに接続されているパーツが、1と2のトランジションを」「3のパーツに接続されているパーツが、3と0のトランジションを」反映することになります。
加えて、「スレーブ側で指定したトラックは、いずれのパーツに対してもTrackConnectParts関数で接続されていてはならない」ことが必須事項として挙げられます(そういった指定を行った場合の正常動作は保証しません。あくまでパーツ群はマスタトラックに接続してください)。
indexTrackは移行前の(元)アニメーションで、indexTrackSlaveは移行後のアニメーションを再生するトラック番号です。
indexTrackとindexTrackSlaveは、(後述のトランジションのキャンセルでない限り)「0 ~ CountGetTrack-1」の値である必要があります(0オリジンの番号です)。
双方のトラックは、本関数の実行前(寸前で構いません)までにAnimationPlay関数でそれぞれのアニメーションが再生されている必要があります。
マスタとスレーブ双方とも再生していても・一時停止していても構いません。
※つまり、双方のトラックとも再生状態であれば「アニメーションが動きながらブレンド」しますし、双方のトラックとも一時停止していれば「マスタの一時停止したフレームからスレーブの先頭フレームへの補間」という動きになります(無論、どちらかが再生状態でどちらかが一時停止状態でも、相応のブレンドを行います)。
ただし、最低でもスレーブトラックでアニメーションが再生状態(未再生でなく・かつAnimationStop状態でない。一時停止状態は問題ありません)にある必要があります。
indexTrackSlaveに「-1」を指定すると、マスタトラックで実行されているトランジションを強制的に解除(キャンセル)します。
キャンセルした場合、「トランジション自体がキャンセル」されますので、「スレーブの影響を一切受けない状態」になりますので注意してください(トランジションの影響を残したままキャンセルすることはできませんので、そういう挙動を望む場合はスレーブのトラックのアニメーションを一時停止か停止して後・トランジション終了を待つなりしてください。またトランジションを満了して終了させる場合AnimationStop関数を使用してください)。
indexTrackに「-1」を設定することができるのは、「全トラックのトランジションを解除する」場合のみで、その際にはindexTrackSlaveは必ず「-1」である必要があります。
timeの単位は秒で、1.0で1秒を表します。
このtimeは、トラックの再生速度(AnimationPlay関数などで与えたrateTime)の影響を受けません。
影響を受けるのは、FunctionTimeElapse(時間経過管理関数定義)に定義された関数が返す時間に対してのみです。
トランジションは「必ずtimeで終了」し、その最中にマスタまたはスレーブのアニメーション再生が終了状態になっても、必ず遷移にはtime秒の時間を要します(その期間、アニメーションもトランジションも終了したことにはなりません。つまり、後述のトランジション終了のコールバックは、必ず本関数からtime後に起こることになります)。
マスタとスレーブで再生されているアニメーションのブレンド率は、「本関数実行からの経過時間 / time」の値(0.0~1.0)になります。
※トランジション中には、アニメーション全体の再生終了コールバック(FunctionPlayEnd)も働きません。再生終了コールバックは、全てのトラックでアニメーションが終了しており・全てのトランジションも終了している段階で発行されます。
※「FunctionTimeElapse」を定義し・同デリゲート関数が、Time.deltaTimeと異なる時間経過を返している場合については、FunctionTimeElapseが返した値の累積がtimeになるまでの期間、トランジションが働きます。
flagCancelPauseAfterTransitionは、大半の場合スレーブ側が一時停止状態にあった場合に有効な指定で「trueの場合、トランジションが終了した段階で、トラックの一時停止状態を解除」「falseの場合、トラックの一時停止状態を保持」します(つまりスレーブが一時停止していない状態では、どちらの設定でも挙動が変わらないことになります)。
※単にトランジション終了時に一時停止解除のためだけにコールバックを受け取るのは面倒だろう……との目的で設置されています(逆に、動きながらブレンドしているアニメーションをトランジション終了時に一時停止するというシチュエーションについては、望まれる動きがアプリケーションの都合に左右される面が大きいと思われますため、コールバック同期で行うようにしてください)。
トランジション終了のタイミングは、マスタトラックのFunctionPlayEndTrackに登録されている関数でコールバックを受けることができます(トラック再生終了コールバック受領関数と同じになりますが、トランジション終了の場合スレーブトラック情報なども渡されますので、明確にどちらかの判別がつきます)。
トラックトランジションの対象は(SpriteStudio6上のアトリビュートで)「X/Y/Z座標」「X/Y/Z軸回転」「X/Yスケール(ローカルスケールは含みません)」のみです(各パーツの「GameObjectのTransformに影響する」アトリビュートだけが対象です)。
それ以外のアトリビュートはトランジションの対象になりません。
また、他のアニメーションから呼び出されているインスタンスアニメーション(子アニメーション)そのものは、トランジションの対象となりません(親のインスタンス「パーツ」までが正常動作保証範囲です)。
通常の手段ではトランジションを子アニメーションに適用することはできませんが、そのような運用をした場合の動作は「不定」が仕様です(仕様外動作となります)。
トラックで再生中のアニメーション番号の取得 (Ver.2.0以降)
関数(動的)
int IndexGetAnimation(int indexTrack)
引数
- indexTrack : トラック番号
返値
トラックで再生しているアニメーション番号
-1 ... エラー
解説
指定トラックで再生しているアニメーション番号を取得します。
再生していないトラックに対して本関数を使用すると、最近の再生アニメーション番号を返します。
indexTrackは、0オリジンのトラック番号で、現状の最大数はCountGetTrack関数で取得可能です(ですので、トラック番号は「0 ~ CountGetTrack-1」の値をとります)。
パーツに接続されているトラック番号の取得
関数(動的)
int IndexGetTrack(int idParts)
引数
- idParts : パーツ番号
返値
パーツに接続されているトラック番号
-1 ... エラー / 未接続
解説
指定パーツに接続されている再生トラック番号を取得します。
idPartsはIDGetParts関数を使用して取得してください。
スレーブトラック番号の取得
関数(動的)
int IndexGetTrackSlave(int indexTrack)
引数
- indexTrack : トラック番号
返値
スレーブトラック番号(0オリジン)
-1 ... 失敗(エラー)・トランジション中ではない
解説
トラックがトランジション中である場合に、スレーブトラックの番号を返します(つまりこの関数の返値が「-1」かどうかでトランジション状態であるかの判別もつきます)。
indexTrackは「0 ~ CountGetTrack-1」の値である必要があります(0オリジンの番号です)。
ただし、スレーブ側のトラックを指定して、マスタ側のトラック番号を取得することはできませんので、注意してください。
再生の速度変更
※本関数は「Ver.0.8.0」に限り「AnimationSetRateTime」になっています。
関数(動的)
bool RateTimeSet(
int indexTrack,
float rateTime
)
引数
- indexTrack : トラック番号
- rateTime : 再生速度
返値
true ... 成功
false ... 失敗(エラー)
解説
指定トラックの再生アニメーションの再生速度を変更します。
再生していないトラックに対して本関数を使用すると、falseを返します。
indexTrackは、0オリジンのトラック番号で、現状の最大数はCountGetTrack関数で取得可能です(ですので、トラック番号は「0 ~ CountGetTrack-1」の値をとります)。
indexTrackに「-1」を設定すると、「全ての再生しているトラックのアニメーション再生速度を変更」します。
再生速度をアプリケーションの都合で変更する方法には、
「本関数を使用してトラックのアニメーション再生速度を変更する方法」
「FunctionTimeElapseで時間経過管理関数を設定する方法」
の2つが存在します。
※この2つの方法はそれぞれ独立して動作させることが可能です。
大きな違いは、
「本関数は、トラックで再生しているアニメーションに対して効果する」
「FunctionTileElapseは、常に全てのトラックに対して効果する」
という点です(そしてその差が、使い分けのガイドラインでもあります)。
似た機能ではあるので、アプリケーションの実装を考慮して・設計と実装が混乱しないように留意してください。
再生の速度取得
関数(動的)
float RateTimeGet(int indexTrack)
引数
- indexTrack : トラック番号
返値
現在の再生速度(1.0で等速)
float.NaN ... エラー
解説
指定トラックの現在の再生速度を取得します。
再生していないトラックに対して本関数を使用すると、最近の再生速度を返します。
indexTrackは、0オリジンのトラック番号で、現状の最大数はCountGetTrack関数で取得可能です(ですので、トラック番号は「0 ~ CountGetTrack-1」の値をとります)。
残り再生(ループ)回数の取得
関数(動的)
int PlayTimesGetRemain(int indexTrack)
引数
- indexTrack : トラック番号
返値
残りの再生回数
0 ... 無限ループ(終らない)
-1 ... エラー
解説
指定トラックの残りの再生回数を取得します。
1が「現在の再生区間」を指しますので、「残りのループ回数」は「本関数-1」になります。
indexTrackは、0オリジンのトラック番号で、現状の最大数はCountGetTrack関数で取得可能です(ですので、トラック番号は「0 ~ CountGetTrack-1」の値をとります)。
再生しているアニメーションのトラックカーソル最大値を取得 (Ver.2.0以降)
関数(動的)
float RangeGetCursor(int indexTrack)
引数
- indexTrack : トラック番号
返値
トラックカーソル最大値(1.0で1秒)
float.NaN ... エラー
解説
指定トラックで再生しているアニメーションのトラックカーソルの最大値(1ループ分の再生秒数)を取得します。
「トラックカーソル」は、現在トラックで再生しているアニメーションの秒数での現在位置を指します。
アニメーションが往復再生させている場合、この範囲は(往路と復路の)2倍になります。
indexTrackは、0オリジンのトラック番号で、現状の最大数はCountGetTrack関数で取得可能です(ですので、トラック番号は「0 ~ CountGetTrack-1」の値をとります)。
再生しているアニメーションのトラックカーソルを取得 (Ver.2.0以降)
関数(動的)
float CursorGet(int indexTrack)
引数
- indexTrack : トラック番号
返値
トラックカーソル(1.0で1秒)
float.NaN ... エラー
解説
指定トラックで再生しているアニメーションのトラックカーソル(現在再生位置の秒数)を取得します。
「トラックカーソル」は、現在トラックで再生しているアニメーションの秒数での現在位置を指します。
アニメーションが往復再生させている場合、往路と復路とでは値が異なることに注意してください。
indexTrackは、0オリジンのトラック番号で、現状の最大数はCountGetTrack関数で取得可能です(ですので、トラック番号は「0 ~ CountGetTrack-1」の値をとります)。
再生しているアニメーションのトラックカーソルを設定 (Ver.2.0以降)
関数(動的)
bool CursorSet(
int indexTrack,
float cursor
)
引数
- indexTrack : トラック番号
- cursor : トラックカーソル
返値
true ... 成功
false ... 失敗(エラー)
解説
指定トラックで再生しているアニメーションのトラックカーソル(現在再生位置の秒数)を設定します(つまり、再生位置を変更します)。
「トラックカーソル」は、現在トラックで再生しているアニメーションの秒数での現在位置を指します。
アニメーションが往復再生させている場合、往路と復路とでは値が異なることに注意してください。
indexTrackは、0オリジンのトラック番号で、現状の最大数はCountGetTrack関数で取得可能です(ですので、トラック番号は「0 ~ CountGetTrack-1」の値をとります)。
cursorは、「0~RangeGetCursor(indexTrack)」の範囲をとり・1.0を1秒とした値になります。
トラックカーソルをフレームにスナップ (Ver.2.0以降)
関数(動的)
float CursorSnapFrame(
int indexTrack,
float cursor
)
引数
- indexTrack : トラック番号
- cursor : スナップ前のトラックカーソル値
返値
フレーム位置にスナップされたトラックカーソル値 float.NaN ... エラー
解説
指定トラックで再生しているアニメーションのフレーム位置に与えられたトラックカーソルをスナップさせた値を取得します(正方向再生時はfloorで・逆方向再生時はceilでスナップさせます)。
スナップする際のFPS値は再生しているアニメーションデータで定義されている値になります。
「トラックカーソル」は、現在トラックで再生しているアニメーションの秒数での現在位置を指します。
アニメーションが往復再生させている場合、往路と復路とでは値が異なることに注意してください。
indexTrackは、0オリジンのトラック番号で、現状の最大数はCountGetTrack関数で取得可能です(ですので、トラック番号は「0 ~ CountGetTrack-1」の値をとります)。
cursorは、「0~RangeGetCursor(indexTrack)」の範囲をとり・1.0を1秒とした値になります。