Timeline機能 - SpriteStudio/SS6PlayerForUnity GitHub Wiki

SS6Player For Unity(以降「SS6PU」)の「SpriteStudio6 Player(SS6Player)」モードでインポートしたデータを(Unityの)Timeline上で制御することができます。
本機能は、SS6PU Ver.2.1.0以降で有効です(それ以前のバージョンではサポートされておりません)。


機能解説メニュー


基本仕様

SS6Playerモードでインポートした下記のプレハブ(のシーン上の実体=オブジェクト)は、(Unityの)Timeline上で制御することが可能です。

  • 「アニメーション」オブジェクト(「Script_SpriteStudio6_Root」コンポーネント)
  • 「エフェクト」オブジェクト(「Script_SpriteStudio6_RootEffect」コンポーネント)
  • 「シーケンス」オブジェクト(「Script_SpriteStudio6_Sequence」コンポーネント)
  • 「複製描画」オブジェクト(「Script_SpriteStudio6_Replicate」コンポーネント)

いずれのオブジェクトも以下の共通仕様での対応となっています。

  1. 「UnityEngine.Timeline.ITimeControl」クラスの継承クラスです。
    オブジェクトをそのままTimeline上に配置(ドロップ)した場合「Controlトラック」として登録されます。

  2. いずれのオブジェクトも(それぞれのコンポーネントで)「タイムライン中で動作している間、オブジェクトからコールバックを行う」機能がついているため、(都度Playableトラック対応に拡張しなくても)動作中のオブジェクト自身への簡単な制御を行うことなどが可能です。


Timelineへの配置方法

シーンを制御するTimelineを作成して、シーン上に配置したSS6PUのアニメーションをTimeline上に設定する簡単な手順を解説します。

基本的に、UnityのTimeline機能そのものの仕様や扱い方などについては、UnityのTimelineの解説などをご参照ください。
※リンク先のバージョンが「Unity2018.4」になっていますが、これは(Timelineの解説目的で)現時点において「Unity2019LTS以前のバージョンで」「日本語訳の記載が多い」バージョンにしてあるだけです。ですので、ご希望のUnityのバージョンが特定されている場合、リンク先でそのUnityのバージョンに変更していただけますようお願いいたします。

Timelineのアセットとインスタンスを作成

  1. Timelineアセットを作成
    Projectウィンドウで、Timelineアセットを作成するアセットフォルダを選択して、右クリックから[Create]-[Timeline]を選択します。
    ここでは説明用として、

    • Timelineアセットを格納するためのアセットフォルダを「Data_Timeline」
    • 新規作成するTimelineアセット名を「Timeline_Sample」

    としておきます。

    これで「Timelineアセット」が作成されました。

  2. Timelineインスタンスを作成(Timelineアセットをシーンに設置)
    Timeline_Play_Step02

    1で作成したTimelineアセットを、Hierarchyウィンドウ(シーン上)にドラッグ&ドロップします。 これで「Timelineインスタンス」がシーン上に作成されました。

  3. Timelineウィンドウを開く
    Unityの上部メニュー[Window]-[Sequencing]-[Timeline]を選択し、Timelineウィンドウを開きます。

シーンに操作対象のアニメーションを設置

  1. シーン上にTimelineで制御するアニメーションを設置
    Timeline_Play_Step04

    Timelineで制御するアニメーションのプレハブをProjectウィンドウからHierarchyウィンドウ(シーン)にドラッグ&ドロップします。
    制御したいアニメーションがすでにシーン上に存在している場合には、本作業はいりません。

    ここでは、SS6PUの「アニメーション」を設置していますが、「エフェクト」「シーケンス」「複製描画」の各オブジェクトについても(初期設置と初期再生内容の設定方法が異なるだけで)ほぼ同じ操作となります。

  2. Timelineウィンドウにシーン上のアニメーションを設定
    Timeline_Play_Step05

    Hierarchyウィンドウ上で、シーンに設置してあるTimelineインスタンスを選択するとTimelineウィンドウにTimelineインスタンスの内容が出力されます(新規作成状態の場合は中身は空です)。
    その上で、4で設置したシーン上のアニメーションをTimelineウィンドウにドラッグ&ドロップします。

    正常にTimeline上にアニメーションが加わった場合、「Control Track」のクリップとして追加されています(既存のControl Trackなどにドロップすると、そのトラック内の別クリップとして設置されます)。

    この後で、(Timeline上のクリップの)インスペクタやTimelineウィンドウ上で、このクリップの「位置」「長さ」などをご希望の形に調整してください。

この状態で、Unity上でシーンを実行すると、Timeline上でクリップの区間内でアニメーションが動作・表示されているかと思います。

これで、1つのアニメーションをTimeline上への設置作業の完了です。


Timelineで制御するオブジェクトに複雑な動作をさせる場合

Timelineに設置したSS6Playerモードのオブジェクトに対して、もっと複雑な動作などを行わせる場合には下記の手段などで実現できます。

  1. Timelineの「Animation Track」などを併用して座標などの動きを与える。

  2. 該当するアニメーションを制御する(C#)スクリプトを作成して、「Playable Track」上で動作させる方法を採ることもできます。

    「Playable Track」はスクリプト制御であるため、アプリケーション仕様や目的などで「どういう単位や管理方法での実装が都合が良いか」が大きく変わるため、現状はアプリケーション側で別途独自に実装を行う必要があります。

    「Playable Track」に設置するクリップを作成するには、原則として下記の2クラスを作成する必要があります。

    • 「Playable Behaviour」(動作制御)
      UnityEngine.Playables.PlayableBehaviourクラスを継承した、「実際にどのような動作をするか」を担当するクラスです。
    • 「Playable Asset」(実体化)
      UnityEngine.Playables.PlayableAssetクラスを継承した、(Tileline制御下で)適時「Playable Behaviourの作成(実体化)」を担当するクラスです。

    詳細な実装方法は、Unityのドキュメントなどを参照してください。

  3. 該当するアニメーションオブジェクトか、シーン上の他のGameObjectにC#スクリプトを付けて、アニメーションオブジェクトの各コンポーネントクラス(Script_SpriteStudio6_Root・RootEffect・Sequence・Replicate)にコールバックを設置して、そのコールバックを受けて制御を行う(コールバック機能の概要はこちらを参照してください)。

※上記1と2については、Timeline上で3Dモデルなどを操作する場合とほぼ近似の方法です。


コールバック機能

下記のオブジェクト(コンポーネント)は、共通して「Timeline上で動作している時に、コールバックを発生」する機能を持っています。

  • 「アニメーション」オブジェクト(「Script_SpriteStudio6_Root」コンポーネント)
  • 「エフェクト」オブジェクト(「Script_SpriteStudio6_RootEffect」コンポーネント)
  • 「シーケンス」オブジェクト(「Script_SpriteStudio6_Sequence」コンポーネント)
  • 「複製描画」オブジェクト(「Script_SpriteStudio6_Replicate」コンポーネント)

各クラスの「FunctionTimeline」に対応した型の関数(デリゲート関数)を定義することで、そのコールバックを受け取ることが可能です。

このコールバックを使って各オブジェクトの簡単な操作を行うことが可能です。
「Playable Track(制御スクリプト)」での操作と混用は推奨しませんが、用途や目的などによって使い分けるようにしてください。
※「個別のスクリプトで制御するまでもない」ような処理をこのコールバックで実装する……という境界線が分別の一例になると思われます。

コールバックの詳細仕様は下記のリンク先を参照してください(リンク先はスクリプトリファレンスです)。

  • 「アニメーション」オブジェクト用
  • 「エフェクト」オブジェクト用
  • 「シーケンス」オブジェクト用
  • 「複製描画」オブジェクト用