SpriteStudioのデータをUnityで動かしてみる(SS5Player for Unity)

ayumegu(プログラマー)
よろしくお願いします。

はーい、今回はSpriteStudioで作成したデータをUnityで動かしてみます。

SpriteStudioをUnityで動かすプラグインは現状二つあって

  • SSPlayer for Unity(Asset Storeからダウンロード)
  • SS5Player for Unity(githubからダウンロード)

SSSPlayer for Unityはちょっと前のバージョンのSpriteStudioのやつです。
githubのやつが現在も開発が続いている最新のソースです。
使い方や中の作りが違うので注意が必要です。

##ソースのダウンロード 下記のgithubからソースをダウンロード
SS5PlayerForUnity</a>

展開して

プロジェクトを開いたところ

##データのインポート フォルダを適当に作成し、フォルダを選択した状態で

Custom->SpriteStudio->Import SS5

ウィンドウが表示されるので任意でチェックをいれたりして

SpriteStudioで作成した.sspjファイルをインポート

読み込み完了

##シーンに配置 カメラも最初からはいっているのでSpriteStudioフォルダの中のCameraをHierarchyにドロップ
モデルはインポートしたフォルダの直下にある_Controlの名前がついたものをドロップ

画面に配置したところ

##とりあえずアニメーションさせてみる

アニメーション自体はPrefabについているScript_SpriteStudio_PartsRoot.csに用意されているメソッドで操作します。 詳細なドキュメントはこちらを参照

下記ソースをGameObjectにアタッチしてScript_SpriteStudio_PartsRootをドラッグドロップで設定

public Script_SpriteStudio_PartsRoot spriteStudioRoot;
enum AnimationType
{
ATTACK = 0,
ATTACK2,
WAIT,
WALK
}
// Use this for initialization
void Start () {
spriteStudioRoot.AnimationPlay((int)AnimationType.WAIT, 0, 0, 1);
}

###AnimationPlayメソッド

  • 第1引数:アニメーションの番号
  • 第2引数:ループ回数 0でループ
  • 第3引数:アニメーションの再生フレーム番号
  • 第4引数:アニメーションの再生速度(負数を設定しても逆再生は行えない)

今回作成したアニメーションは4つでアニメーションの情報はInspectorからみることができます

順番はSpriteStudioで作ったときの順番のまま上から0になる

##callback

アニメーションの終了時のコールバックも受け取れる
五回再生したらAnimEndメソッドを呼ぶ例

// Use this for initialization
void Start () {
spriteStudioRoot.AnimationPlay((int)AnimationType.WALK, 5, 0, 0.8f);
spriteStudioRoot.FunctionPlayEnd = AnimEnd;
}
public bool AnimEnd(GameObject ObjectControl)
{
Debug.Log (ObjectControl.name);
return true;
}

AnimEndの戻り値でfalseを返すとオブジェクトが削除される
他にも当たり判定のcallbackなども用意されています。

##DrawCallがあれれ?? オブジェクトを複製したとき1匹につき1Drawcall増えてるや

AssetStoreにある方だとこんな風にはならないのですがうーむ・・・

と調べていたら githubのQ&Aのところに

おやっ 対応されてるバージョンがあるらしい
つい最近だw

ということで落としてみた

##結果・・・
DrawCallが1になってる〜〜やったね

##感想 AssetStoreのと比べてSS5の方が使いやすいというかわかりやすい構造になっている。
SpriteStudioDatabaseなどというanimationが管理されているものがなくなってPrefabごとに完結しててわかりやすい。
今後の新しい機能の対応もSS5の方に対応されていくみたいだし、こちらを使った方が良さそうだ^^  

今回はこの辺で。