スクリプトリファレンス([Root]コールバック) - SpriteStudio/SS6PlayerForUnity GitHub Wiki

SS6Player for Unity(以降「SS6PU」)のアニメーション制御用クラス(Script_SpriteStudio6_Root)の様々なタイミングで受け取ることができるコールバック関係の機能群のスクリプトリファレンスです。


時間経過管理関数定義

プロパティ(動的)

Library_SpriteStudio6.CallBack.FunctionTimeElapse FunctionTimeElapse

定義関数型

delegate float Function(Script_SpriteStudio6_Root scriptRoot)

定義関数引数

  • scriptRoot : 呼出元のアニメーションオブジェクト

定義関数返値

経過時間(1.0fが1秒)

解説

アニメーションオブジェクト毎に(呼出元の)「前の処理サイクルから今回の処理サイクルまでにかかった時間」を決定する関数を定義することが可能です。
nullに設定すると、初期状態に戻し・その場合の経過時間は「UnityEngine.Time.deltaTime」と等価になります。

本コールバックは、MonoBehaviour.LateUpdateのタイミングで発生します。
ただし、本コールバックを発生するのは、「最親のアニメーションもしくは単独エフェクトのオブジェクト」だけです(親アニメーションから呼び出されているインスタンスアニメーションやエフェクトなどは、関数が定義されていたとしても実効しません)。
アニメーション処理内のコールバックの詳細タイミングについては、こちらを参照してください

主な用途として、アプリケーションやアニメーションオブジェクト毎で特殊な経過時間を処理する場合に、このプロパティを使用して定義した関数でアニメーションの持つ全ての再生トラックに対して、経過時間を指定することができます。
※各再生トラックは、「この定義関数から指定された経過時間に、それぞれのトラックの再生時間係数(アニメーション再生時などに与えたrateTime)を乗算した時間」をトラックの経過時間とします。

基本的に、トラックの再生速度変更と似たような機能ですが、明確に機能差がありますので、注意してください。
本定義関数が返す値はトラックだけではなく、アニメーションオブジェクト全体の経過時間管理に使われますので、再生速度の影響を受けない時間経過(例えばトランジションの時間管理)に対しても影響を及ぼします。
そのため、主な用途としては、特殊なポーズ状態を作ることやデバグ機能などの時間管理などに使用することができます。


再生終了検知

変数(動的)

Library_SpriteStudio6.CallBack.FunctionPlayEnd FunctionPlayEnd

定義関数型

delegate bool Function(
        Script_SpriteStudio6_Root scriptRoot,
        GameObject objectControl
    )

定義関数引数

  • scriptRoot : 呼出元のアニメーションオブジェクト
  • objectControl : 呼出元の制御用オブジェクト

定義関数返値

true ... シーンに残る
false ... シーンから自身を抹消(Destroy)する

解説

アニメーションオブジェクト自体が再生終了した時に発行されるコールバックの受領関数(デリゲート)を定義します。
nullを設定するとコールバックは発行されません。

アニメーションの終了の条件は下記の条件が全て成立したタイミングになります。

  • 単数ないしは複数の再生トラックでアニメーションを再生している状態(何も再生していないアニメーションオブジェクトは終了検知の対象にはなりません)
  • 全ての再生トラックの再生が終了した
  • 全てのトランジションが終了した(ないしはトランジション未使用である)

本コールバックは、MonoBehaviour.LateUpdateのタイミングで発生します。
本コールバックは、インスタンスアニメーションであっても関数が定義してあれば発行されます(ただし、インスタンスアニメーションのアニメーションオブジェクトの本変数に関数定義する必要があります)。
アニメーション処理内のコールバックの詳細タイミングについては、こちらを参照してください

原則、本コールバックはアニメーションの1処理サイクル分の処理が終了したタイミングで発生しますので、トラックの再生終了検知やユーザーデータ検知のコールバックに比べて、いくらかは呼出元の再生状態に影響を与える処理を行っても大丈夫です。
ただ、発行タイミングがLateUpdateだということを加味した時に、あまり他のオブジェクトなどへの更新状態に影響のある処理をするべきではないと考えます(特に更新処理をUpdateで行っている構造の場合、処理サイクルのずれでの想定外動作などの原因になります)。
できるだけ簡素な処理(次のUpdateなどで処理をする内容を設定する)だけに留めることを推奨します。

受領関数のobjectControlは、再生しているアニメーションオブジェクトが制御用オブジェクトを持っている場合、そのオブジェクトの参照が渡されます(持っていない場合はnullが渡されます)。
制御用オブジェクトを持っているか否かの区別は、シーンに置かれた(instantiate含む)際に、制御用プレハブが元になっているか否かです。

受領関数がfalseを返した場合、呼出元のアニメーションオブジェクトは自分自身をDestroyしてシーンから消去します。
呼出元が制御用オブジェクトを持っている(objectControlがnullでない)場合、制御用オブジェクトも含んで消去します。
ただし、インスタンスアニメーション(親を持つアニメーション)の本コールバック受領関数がfalseを返した場合は無視されます(インスタンスオブジェクトのみを勝手にDestroyすると様々な問題が起こりますので、それを抑止するためです)。


トラック再生終了検知

変数(動的)

Library_SpriteStudio6.CallBack.FunctionControlEndTrackPlay FunctionPlayEndTrack

※「FunctionPlayEndTrack[トラック番号] 」でのアクセスです。
 「FunctionPlayEndTrack」は配列への参照なので操作しないでください(正常動作の保証をしません)。

定義関数型

delegate void Function(
        Script_SpriteStudio6_Root scriptRoot,
        int indexTrackPlay,
        int indexTrackSlave,
        int indexAnimation,
        int indexAnimationSlave
    )

定義関数引数

  • scriptRoot : 呼出元のアニメーションオブジェクト
  • indexTrackPlay : マスタトラック番号
  • indexTrackSlave : スレーブトラック番号
  • indexAnimation : マスタトラックの再生アニメーション番号
  • indexAnimationSlave : スレーブトラックの再生アニメーション番号

定義関数返値

(なし)

解説

トラックの再生が終了した時に発行されるコールバックの受領関数(デリゲート)を定義します。
(トラック)トランジション の終了時にもこの関数が呼び出されます。
nullを設定するとコールバックは発行されません。

本コールバックは、MonoBehaviour.LateUpdateのタイミングで発生します。
本コールバックは、インスタンスアニメーションであっても関数が定義してあれば発行されますが、インスタンスアニメーションは「常にトラックは0しか使用しない」仕様になっていますので、取得できるタイミングとしては「再生終了検知」のコールバックとほぼ差異がありません。
アニメーション処理内のコールバックの詳細タイミングについては、こちらを参照してください

コールバック受領関数のindexTrackSlaveとindexAnimationSlaveは、トラックトランジション終了時のコールバック時にのみ有効な値(0以上の値)が入ってきます。
※indexTrackSlaveが0以上時には、常にトラックトランジション終了のコールバックだと判定してください。

通常のトラック再生終了時のコールバックでは、(「再生終了検知」コールバックのように)トランジションの終了を待つことは行いません。
※トランジション中でも、そのトラックのアニメーションが再生停止した時点を取得することができます。

原則、本コールバックはアニメーションの1処理サイクル分の処理が終了したタイミングで発生しますが、特に後続のトラックの再生終了コールバックやアニメーション再生終了コールバックなどの処理が残っていますので、特に他のトラック等に対する再生状態に影響を与える処理を行わないことを推奨します。
できるだけ簡素な処理(次のUpdateなどで処理をする内容を設定する)だけに留めることを推奨します。


ユーザーデータ検知

変数(動的)

Library_SpriteStudio6.CallBack.FunctionUserData FunctionUserData

定義関数型

delegate void Function(
        Script_SpriteStudio6_Root scriptRoot,
        string nameParts,
        int indexParts,
        int indexAnimation,
        int frameDecode,
        int frameKeyData,
        ref Library_SpriteStudio6.Data.Animation.Attribute.UserData userData,
        bool flagWayBack
    )

定義関数引数

  • scriptRoot : 呼出元のアニメーションオブジェクト
  • nameParts : 検知されたパーツ名
  • indexParts : 検知されたパーツID(namePartsのパーツID)
  • indexAnimation : 再生アニメーション番号
  • frameDecode : デコードした時の再生フレーム
  • frameKeyData : ユーザーデータが定義されているフレーム
  • userData : ユーザーデータ(簡易コピー)
  • flagWayBack : 往復再生時の往路・復路の種別

定義関数返値

(なし)

解説

パーツのユーザーデータを検知した時に発行されるコールバックの受領関数(デリゲート)を定義します。
nullを設定するとコールバックは発行されません。

本コールバックは、MonoBehaviour.LateUpdateのタイミングで発生します。
本コールバックは、インスタンスアニメーション内のユーザーデータはコールバックしません(子アニメーションはユーザーデータの検知処理が行われません。子アニメーションの本コールバックを設定しても、検知処理自体がスキップされますので実効しません)。
アニメーション処理内のコールバックの詳細タイミングについては、こちらを参照してください

原則、本コールバックはアニメーションのパーツ更新処理の途中で発生しますので、再生状態に影響を与える処理を行わないでください
できるだけ簡素な処理(次のUpdateなどで処理をする内容を設定する)だけに留めてください。

本コールバック受領関数のuserDataからは、下記の内容を取得可能です。

  • userData.Number : ユーザーデータに格納されている数値をuintで取得
    ※事前にIsNumberがtrueであることで存在を確認することを推奨します。
  • userData.NumberInt : ユーザーデータに格納されている数値をintで取得
    ※事前にuserData.IsNumberがtrueであることで存在を確認することを推奨します。
  • userData.Rectangle : ユーザーデータに格納されている矩形情報をRectで取得
    ※事前にuserData.IsRectangleがtrueであることで存在を確認することを推奨します。
  • userData.Coordinate : ユーザーデータに格納されている座標情報をVector2で取得
    ※事前にuserData.IsCoordinateがtrueであることで存在を確認することを推奨します。
  • userData.Text : ユーザーデータに格納されているテキストをstringで取得
    ※事前にuserData.IsTextがtrueであることで存在を確認することを推奨します。

注意点として、userDataはアニメーションのマスタデータ内に保持しているユーザーデータの簡易(シャロー)コピーです。
そのため、特に「userData.Text」を書き換えると(string型が参照型であるため)、マスタデータを書き変えてしまうため、原則、userDataを書き換えることはしないようにしてください。

再生中にフレームスキップが起こって、複数フレーム分のユーザーデータが通知される場合、下記の順序で通知が発生します。

  1. パーツIDが若いものから
  2. 対象区間内の再生フレーム順

つまり、フレーム順が最上位優先ではなく・パーツIDが最優先となります。
そのため、フレームスキップが起きた場合に「常にフレーム順でコールバックされる」わけではないことに注意してください。

基本的に、ユーザーデータは検知処理に(他のアトリビュートよりも)CPU負荷を要するため、

  • できる限り1つのパーツにまとめて配置する

ことを推奨します(ユーザーデータが設置されているパーツが少ない程パフォーマンスの助けになる上、フレームスキップ時の優先性を気にしなくてすみます)。


コライダ(進入・離脱・継続)接触検知

※本変数は「Ver.0.8.0」に限り「FunctionColliderOnTriggerEnter」「FunctionColliderOnTriggerExit」「FunctionColliderOnTriggerStay」になっています。

変数(動的)

Library_SpriteStudio6.CallBack.FunctionCallBackCollider FunctionColliderEnter
Library_SpriteStudio6.CallBack.FunctionCallBackCollider FunctionColliderExit
Library_SpriteStudio6.CallBack.FunctionCallBackCollider FunctionColliderStay

定義関数型

delegate void Function(
        Script_SpriteStudio6_Root instanceRoot,
        string nameParts,
        int idParts,
        Collider collider,
        Collider pair
    )

定義関数引数

  • scriptRoot : 呼出元のアニメーションオブジェクト
  • nameParts : 接触検知されたパーツ名
  • indexParts : 接触検知されたパーツID(namePartsのパーツID)
  • collider : namePartsが持っているコライダ
  • pair: 接触しているコライダ

定義関数返値

(なし)

解説

パーツに設定されているコライダへのコライダ接触を検知した時に発行されるコールバックの受領関数(デリゲート)を定義します。

  • FunctionColliderEnter : 接触開始(進入)
  • FunctionColliderStay : 接触(継続)
  • FunctionColliderExit : 接触終了(離脱)

になります。
nullを指定すると、コールバックを発生しません。

本コールバックは、MonoBehaviour.OnTrigger~(コライダ接触処理)のタイミングで発生し、同関数のラッパです。
FunctionCollision~がコリジョン型の接触検知ですので、インポータの「Collider」のオプション群の設定と併用しながら、アプリケーションの都合で使い分けてください。


コリジョン(進入・離脱・継続)接触検知

※本変数は「Ver.0.8.0」に限り「FunctionColliderOnTriggerEnter 」「FunctionCollisionOnTriggerExit」「FunctionCollisionOnTriggerStay」になっています。

変数(動的)

Library_SpriteStudio6.CallBack.FunctionCallBackCollision FunctionCollisionEnter
Library_SpriteStudio6.CallBack.FunctionCallBackCollision FunctionCollisionExit
Library_SpriteStudio6.CallBack.FunctionCallBackCollision FunctionCollisionStay

定義関数型

delegate void Function(
        Script_SpriteStudio6_Root instanceRoot,
        string nameParts,
        int idParts,
        Collider collider,
        Collision contacts
    )

定義関数引数

  • scriptRoot : 呼出元のアニメーションオブジェクト
  • nameParts : 接触検知されたパーツ名
  • indexParts : 接触検知されたパーツID(namePartsのパーツID)
  • collider : namePartsが持っているコライダ
  • contacts : 接触しているコリジョン

定義関数返値

(なし)

解説

パーツに設定されているコライダへのコリジョン接触を検知した時に発行されるコールバックの受領関数(デリゲート)を定義します。

  • FunctionCollisionEnter : 接触開始(進入)
  • FunctionCollisionStay : 接触(継続)
  • FunctionCollisionExit : 接触終了(離脱)

になります。
nullを指定すると、コールバックを発生しません。

本コールバックは、MonoBehaviour.OnCollision~(コライダ接触処理)のタイミングで発生する、同関数群のラッパです。
FunctionCollider~がコライダ型の接触検知ですので、インポータの「Collider」のオプション群の設定と併用しながら、アプリケーションの都合で使い分けてください。


Timeline制御コールバック

変数(動的)

Library_SpriteStudio6.CallBack.FunctionTimeline FunctionTimeline

定義関数型

delegate bool FunctionTimeline(
        Script_SpriteStudio6_Root scriptRoot,
        KindSituationTimeline situation,
        float timeElapsed,
        double timeLocal
    )

定義関数引数

  • scriptRoot : 呼出元のアニメーションオブジェクト
  • situation : 呼び出されたシチュエーション
  • timeElapsed : 前回呼出からの経過時間(1.0が1秒)
  • timeLocal : タイムライン上で経過した時間(1.0が1秒・開始を0.0とした時の絶対経過時間)

定義関数返値

(なし)

解説

アニメーションオブジェクトがTimeline上で制御されている最中に、発生するコールバックの受領関数(デリゲート)を定義します。
このコールバックを使用して、アニメーションオブジェクト自体の制御なども行うことが可能です(ただし、あまり込み入った処理を行うことや・Playable Trackクリップとの混用については推奨しかねます。スクリプトからの複雑な制御を行う場合には、Playable Trackを使用した方がTimelineのワークフローに適していると思われます)。

situationによって呼び出された状況を把握することができます。

  • Library_SpriteStudio6.KindSituationTimeline.START
    Timeline上で制御が始まった時に発生します。
    この時のtimeElapsedとtimeLocalはfloat.NaNです。
  • Library_SpriteStudio6.KindSituationTimeline.END
    Timeline上で制御が終了する時に発生します。
    この時のtimeElapsedとtimeLocalはfloat.NaNです。
  • Library_SpriteStudio6.KindSituationTimeline.UPDATE
    Timeline上で制御されている最中に毎処理ループで発生します。