Skip to content

アニメーションの再生

MasamiYitsuse edited this page Aug 30, 2023 · 112 revisions

インポートしたアニメーションを再生する基本的な手順になります。

また、ここで解説しているのは「SpriteStudio6 Player(SS6Player)」モードです。
それ以外のモードでインポートしたデータについては、それぞれ下記になります。

※どちらも「アニメーションをシーン配置後に必要な作業」という項目です。



アニメーションのシーンへの設置方法

「SpriteStudio6 Player」モードでインポートしたアニメーション(ssae)データのシーン上での再生方法の手順を解説します。


空のシーン

シーン(Hierarchy)に何もない状態です。
※この状態から始める必然性はまったくありません。

InitialPlay-Step01


カメラを設置する

InitialPlay-Step02

新規(空の)シーンに、カメラを設置します。
Unityの上部メニュー[GameObject]-[Camera]から作成する新規カメラでも構いませんし、「Asset/SpriteStudio6/Camera/」の中にあるサンプルカメラを使用しても構いません。

サンプルのカメラはそれぞれ720pと1080pの解像度をドット・バイ・ドット(GameObjectのTransformのPositionの1.0が1ピクセル相当)で扱うための設定になっています。

  • Camera2D Pixel (720p) : 1280×720
  • Camera2D Pixel (1080p) : 1920×1080

※サンプルのカメラ(Camera2D Pixel)とUnityで新規作成したカメラとで設定が異なっている点(もしくはUnityのOrthographicカメラの初期設定でSS6PUのアニメーションを同じ大きさで出す方法)については、こちらを参照してください。


アニメーションをシーンに配置する

InitialPlay-Step03

シーンにカメラを設置したら、インポートしたアニメーションのプレハブをシーンにドロップします。
シーン内の配置位置については、どこでも構いません(カメラに追従するのであればCameraの下に置いても構いませんし、ご都合の良い階層に設置してください)。
※ここではカメラと同じ階層(シーンのルート直下)に置いています。

インポートしたアニメーションは、Projectウィンドウ内の下記にあります。

  • 制御用プレハブを作成した場合
    インポート時に「Create Control-Prefab」をチェックしていた場合は、インポート時に指定したアセットフォルダの直下に「ssae名_Control」という名前のプレハブがあります。
  • 制御用プレハブを作成しなかった場合
    インポート時に「Create Control-Prefab」をチェックしていない場合は、インポート時に指定したアセットフォルダの下に「PrefabAnimation」というフォルダがあります。
    その中にssaeと同じ名前のプレハブがあります。

※制御用プレハブの役割と有無の差については、こちらの解説を参照してください

ここで何も表示されない場合は、こちらの項目をチェックしてみてください


アニメーションの設定

さらに、アニメーションの再生状態を変更する場合には、アニメーション(Script_SpriteStudio6_Root)用インスペクタから設定を行います。

InitialPlay-Step04

アニメーション用インスペクタは下記にあります。

  • 制御用プレハブがある場合 シーンに置いたアニメーションのプレハブのひとつ下のGameObjectにあります。
  • 制御用プレハブがない場合 シーンに置いたアニメーションのGameObjectにあります。

そのアニメーション用インスペクタの「Initial/Preview Play Setting」のフォールドアウトを開きます。
その中にある「Animation Name」のプルダウンメニューでアニメーションを選択します。
※上記の画像ではアニメーションが1つしかありませんが、元のssaeファイルに複数のアニメーションがある場合には、複数のアニメーション名が表示されます。

アニメーション用インスペクタの詳細はこちらを参照してください。


さらに複雑なアニメーション制御をする

ゲームなどで使うには、もっと複雑な制御をする必要が生じてきますが、その場合にはスクリプト(C#)からプログラマブルな操作をする必要があります。

スクリプトからのアニメーションの操作については、こちらを参照してください
また、sampledevelopブランチでサンプルプログラムを提供しております。



シーケンスのシーンへの設置方法

「SpriteStudio6 Player」モードでインポートしたシーケンス(ssqe)データのシーン上での再生方法の手順を解説します。

シーケンスは、「同じSpriteStudio6プロジェクト(sspj)内のアニメーション(ssae内に作成されている各アニメーション)群を、指定された順序・方法で連続再生する」ための機能です(SpriteStudio6.4以降でβ版実装されています)。

シーケンスは特殊な再生構造であるため、アニメーションとは異なる設置手順が必要になります。


空のシーン

シーン(Hierarchy)に何もない状態です。
この手順はアニメーションの場合と全く同じです。
※この状態から始める必然性はまったくありません。


カメラを設置する

新規(空の)シーンに、カメラを設置します。
この手順はアニメーションの場合と全く同じです。


シーケンス再生オブジェクトをシーンに配置する

InitialPlay-Sequence-Step03

シーンに「シーケンス再生オブジェクト」を設置します。
SS6PUが格納されているアセットフォルダ(通常は「SpriteStudio6」)の下の「Prefab/Sequence」の中にある「Control Sequence」という名前のプレハブを、シーンの希望の位置にドラッグ&ドロップします。
この時にシーン上に配置された(プレハブの実体の)GameObject名は自由に変更して構いません。


使用するプロジェクトデータをシーケンス再生オブジェクトに設定する

InitialPlay-Sequence-Step04

  1. Projectウィンドウで、再生するシーケンスが格納されている(インポートした)プロジェクトデータを探します。
    通常は、インポートしたデータが確報されているアセットフォルダの下の「DataProject」の中に「dp_(インポートしたsspj名)」という名前で格納されています。

  2. Hierarchyウィンドウ上でシーンに設置したシーケンス再生オブジェクトを選択して(インスペクタを表示した後)、1で発見したプロジェクトデータをインスペクタの「Static Data」内「Data:Project」にドラッグ&ドロップします。

  3. インスペクタの「Sequence-Pack Name」の項目にプロジェクトデータ内に格納されているシーケンスパック(ssqeに相当)名がリスト化されますので、再生したいシーケンスパックをプルダウンから選択します。
    シーケンスパック名は、(原則として)SpriteStudio6のssqeファイルのボディ名と同じです。

  4. 3で選択したシーケンスパック中に含まれるシーケンスデータが「Sequence-Data Name」の項目にリスト化されますので、再生したいシーケンスをプルダウンから選択します。


さらに複雑なシーケンス制御をする

ゲームなどで使うには、もっと複雑な制御をする必要が生じてきますが、その場合にはスクリプト(C#)からプログラマブルな操作をする必要があります。



複製描画のシーンへの設置方法(Ver.2.0以降)

すでにシーン上に設置されている(「SpriteStudio6 Player」モードでインポートされた)アニメーションと「全く同じ描画」を行う、「複製描画」機能の再生方法の手順を解説します(複製描画機能は、SS6PU Ver.2.0以降に実装されていますので、Ver.1.x系ではサポートされていません)。

複製描画は特殊な再生構造であるため、アニメーションとは異なる設置手順が必要になります。


複製元のアニメーションの設置

空のシーンに複製元となるアニメーションを設置する手順は、通常のアニメーションシーケンスの設置ですので、各解説を参照ください。


複製描画再生オブジェクトをシーンに配置する

InitialPlay-Replicate-Step02

シーンに「複製描画再生オブジェクト」を設置します。
SS6PUが格納されているアセットフォルダ(通常は「SpriteStudio6」)の下の「Prefab/Replicate」の中にある「Control Replicate」という名前のプレハブを、シーンの希望の位置にドラッグ&ドロップします。
この時にシーン上に配置された(プレハブの実体の)GameObject名は自由に変更して構いません。


複製元の描画オブジェクトを設定する

InitialPlay-Replicate-Step03

Hierarchyウィンドウ(シーン上)で、設置した「複製描画再生オブジェクト」を選択してインスペクタを出してください。
このインスペクタの「Original Animation」に、シーン上で設置したアニメーションオブジェクトをドラッグ&ドロップしてください。

この際に、設定するGameObjectに注意が必要な場合があります。

  • 複製元がアニメーション
    複製元のアニメーションオブジェクトが制御用GameObjectを持っている(設置元のプレハブが制御用プレハブの)場合には、制御用プレハブの1段階下(子)の「Script_SpriteStudio6_Root」コンポーネントを持っているGameObjectを設定する必要があります。

  • 複製元がシーケンス
    シーケンス再生オブジェクト(「Script_SpriteStudio6_Sequence」コンポーネントを持っているGameObject)を指定してください。



何も表示されない場合

何も表示されない場合は次の項目を確認してください。

  • 座標が画面外に出ていませんか?
    オブジェクトのTransformのPositionをX=0, Y=0, Z=0 に変更してみてください。

  • スケールが小さくなっていませんか?
    オブジェクトのTransformのScaleをX=1, Y=1, Z=1 に変更してみてください。

  • カメラの座標とスケールが変な値になっていませんか?
    オブジェクトと同様にカメラの座標やスケールに値が入っていると、期待とことなる表示をします。
    カメラののTransformのPositionをX=0, Y=0, Z=0・ScaleをX=1, Y=1, Z=1 に変更してみてください。

  • カメラのNearクリップ・Farクリップに引っ掛かっていませんか?
    Cameraに設定されるNearよりも手前(例えばNearが0の場合、Z座標が0未満)に配置すると表示されなくなります。 同様にFarよりも奥に配置しても表示されなくなります。
    NearとFarの間にアニメーションを配置する(TransformのPosition-Zを調整する)事で表示されるようになります。
    また、どう調整してもNear・Farクリップに引っ掛かってしまい一部のパーツなどが欠けたりする場合には、Script_SpriteStudio6_Rootのインスペクタで「Planarization」のチェックを入れることでZ方向の厚みをなくすことができます。

  • Script_SpriteStudio6_Rootのインスペクタで「Hide Force」がチェックされていませんか?
    「Hide Force」がチェックされていると、アニメーションが強制的に非表示になります。


制御プレハブの役割について

インポータの(「Option: Basic」内)「Create Control-Prefab」で有無を設定できる「制御プレハブ」について、その基本的な役割を解説します。

制御用プレハブの基本的な構造は(その設置目的から)
「本来のアニメーションオブジェクトの上に1つGameGaobjectが存在している」
状態ということができます。
※実際にはもう少し複雑な実装になっていますが、ここではその詳細な説明は割愛します。ただ、この実装によってスクリプトから動的に扱う場合に注意点が生じます。それについては、後述します。

SpriteStudio6のデータはRootパーツ(デフォルトのパーツ名「root」)にもX/Y/Z座標・X/Y/Z軸回転・X/Yスケールを指定することができます。
(Rootパーツの)これらのアトリビュートは、Unity上でアニメーションオブジェクトの一番上の(Script_SpriteStudio6_Rootを持っている)GameObjectのTransformに反映されます。
インポートしたデータの中の「PrefabAnimation」フォルダの中にあるデータがこのデータになります。
このデータを直接シーンに置いてアニメーションオブジェクトを移動させようとした場合に、(指定したデータとアニメーションデータとで)Transformを奪い合いしてしまい思い通りに動かせないことが生じます。

これを避けるためにはいくつかの方法があります。

  1. ひとつ上(親)に何も制御されていないGameObjectを置いて・そのGameObjectを制御するようにする。
  2. RootパーツにはTransformに影響を与えるアトリビュートは使用しないで、Rootパーツの子にNULLパーツを設置して(このパーツの下に全てのパーツを配置する)ことでRootパーツに対応したGameObjectを直接操作できるようにする。

この1の方法を自動で作成する設定が「Create Control-Prefab」です。
※「制御用プレハブ」の呼称は、この「制御用のGameObjectごとプレハブに格納してある」という意味です。

同様の現象は3Dモデルをインポートした時にも起こることがあり、その場合にも同様の方法が回避策のひとつとなります。
ですので、同じ役割(制御用)のGameObjectを自分で設置することの方に慣れている場合、(制御用プレハブを作成せずに)PrefabAnimationフォルダの中にあるアニメーションのプレハブを直接(自分で設置した)GameObjectの下に設置する用法でも問題ありません。

制御用オブジェクトのプレハブを実体化するときの注意点

制御用オブジェクトが付いているプレハブ(制御用プレハブ)をスクリプトからinstantiateする際に、注意点が存在しています。

  • 制御用プレハブをinstantiateした直後は、アニメーションが扱えない。(Ver.2.1未満)
    本項目は、下記の3条件が満たされている場合において、下記にある「プレハブのネスト(多段のプレハブ)」を展開スクリプトを実行しない形で(Unity2018.3以降での新しいプレハブシステムで)実装しているため、この項目の注意点は解消されています。

    1. Unity2019LTS以降でSS6PU Ver.2.1.0以降を使用している
    2. 「Use Script For "Control-Prefab"」の設定が非チェックである
    3. 上記2条件を満たした環境下でインポートしたデータ

    (以下、Ver.2.1未満のSS6PU・Unity2019LTS未満においてのみ の注意点です)
    制御用オブジェクトには、実体のアニメーションオブジェクトを自身の子としてinstantiateするためのスクリプト(Script_SpriteStudio6_ControlPrefab)が付加されています。
    そのため、スクリプトで制御用プレハブをinstantiateした直後には、(アニメーションオブジェクト自体は実体化されていないため)「Script_SpriteStudio6_Root.RootGet」関数の返値は常にnullになりアニメーションの制御が行えません。
    制御用プレハブを実体化した場合、次の処理サイクル以降で「Script_SpriteStudio6_Root.RootGet」関数を実行してアニメーションの操作を行うようにしてください(アニメーションオブジェクトのプレハブを直接instantiateした場合や、すでにシーンに設置してある制御用プレハブについては、それを考慮する必要はありません)。
    制御用オブジェクトが専用スクリプトを介してinstantiate処理を行っている理由は、「プレハブのネスト(プレハブの入れ子)」と同様の構造をネストされたプレハブへの参照を失わないように実現するためとなっています。


サンプルのカメラと新規作成したカメラとの違い

サンプルのカメラ(Camera2D Pixel)は、Unityのカメラを新規作成した時と下記の点が異なっています。

  • カメラが「Orthographic」(平行投影)になっている。デフォルトは「Perspective」(遠近法)。
  • 720pと1080pの解像度になるように設定されている(Sizeが縦方向ピクセル数の1/2)。
  • 「Clipping Plains」が「Nearが0」「Farが10000」になっている。
  • 「Occulision Culling」「Allow HDR」「Allow MSAA」などのオプションが非チェックになっている。
  • 「Flare Layer」「GUI Layer」「Audio Listener」などの他のコンポーネントを削除してある。

上記の内、「Size」の値について若干触れておきます。
「Orthographic」に設定した時の(この)Sizeの値は、「画面の縦をどれ位の値の幅で管理するか」を設定する項目です。
例えば初期状態の「5」の場合、「5(上端)~-5(下端)」の間で管理されています。
サンプルのカメラの720pの場合、「360(上端)~-360(下端)」の間で管理されています。
GameObjectのTransformのPosition-Yの値がこの範囲内なら画面内にあると考えていただいて構いません(画面の座標系の分解能と言い換えることができます)。

つまり、単にスケールの違いなので、インポートしたSpriteStudio6のデータを初期状態の「OrthoGraphic」「Size=5」の状態のカメラに同じような大きさで出したい場合は
「TransformのScale-XとScale-Yを(約)0.0139に設定」
すればよいことになります。
※「5 ÷ 360 = 0.01388888... = 約0.0139」の計算になります。
※元のアニメーションが1080p(Size=540)想定で作成されている場合には、「5 ÷ 540 = 約0.00926」になります。

Clone this wiki locally