【Ver.5.8】複数のsspjをUnity上で連続再生する

複数のsspjを、SS5Player for Unityを使用して連続で再生する方法を解説します

今回使用する環境は以下の通りです。

  • アニメーション作成
    OPTPiX SpriteStudio Ver.5.8
  • 再生するUnityの環境
    SS5Player for Unity v1.5.16
    Unity 2017.1

目次

作成手順

事前に再生するアニメーションをSpriteStudioで作成済であることを前提としています。
SpriteStudioを用いたアニメーションの作成方法については本ヘルプセンターをご覧ください。

プロジェクトを作成する

Unityを開き、Fileメニューから「New Project」を選択し、新しくプロジェクトを作成します。

作成したプロジェクトの中に、SS5Player for Unityを追加します。
詳しい手順は以下のページを参照してください。

データを格納するフォルダを作成する

作成したアニメーションと、連続再生のためのスクリプトを格納するフォルダを作成します。
今回は「Assets」フォルダの下に「Demo」という名称でフォルダを作成します。

1.Projectウィンドウで「Assets」フォルダを選択し、コンテキストメニューを開いて「Create」から「Folder」を選択します。

今回は分かりやすくするために「Demo」という名称に変更します。

2.この「Demo」フォルダの下に、スクリプトを納める「Script」、リソースを納める「Resources」を作成します。

sspjをインポートする

再生したいアニメーションのsspjをUnityにインポートします。
インポート先は「Resources」を指定してください。

sspjをUnityにインポートする方法については以下のページをご覧ください。

スクリプトを準備する

連続再生の制御を行うためのスクリプトをプロジェクトに追加します。

Projectウィンドウの「Script」を指定し、スクリプトをドラッグドロップして追加してください。
今回は「MovieDemo.cs」というC#で作成したスクリプトを追加しました。

SpriteStudioで作成したアニメーションの再生、再生終了時に次のアニメーションを指定して再生という動作を行います。

カメラの設定をする

表示するためのカメラの設定を行います。

1.Projectウィンドウから「SpriteStudio」アセットを開き、「BaseSet_Ver_1_3」を展開します。
2.「Camera_Ortho(720p)」と「View(Manager-Draw)」をHierarchyウィンドウにドラッグドロップします。
3.Hierarchyウィンドウにドラッグした「View(Manager-Draw)」を選択し、Inspectorウィンドウを開きます。

4.「Script_SpriteStudio_Manager」の中の「Camera」を変更します。
Camera欄の右にあるボタンを押して、Select Cameraダイアログから「Camera_Ortho(720p)」を選択してください。

Hierarchyウィンドウから「Camera_Ortho(720p)」をCamera欄にドラッグドロップしても選択することができます。

 

アニメーション制御を組み込む

1.Hierarchy ウィンドウのコンテキストメニューを開いて、Create Emptyを選択、空のGameObjectを作成します。

今回は名前を分かりやすくするため、名称を MainObject に変更しました。

2.「Script」を開き、「MovieDemo」をドラッグして、Hierarchy ウィンドウのMainObjectへドロップします。

※ Hierarchy ウィンドウ の MainObject をクリック、 Inspectorへ表示された「Add Component」 をクリック。開いたプルダウンメニューから Scripts を選択して、Movie Demo を選択する方法もあります。

3.Hierarchy ウィンドウ の MainObject をクリック、 InspectorにMovie Demo (Script)項目が表示され、Rendering View という項目があることを確認します。
4.この項目へ、Hierarchy ウィンドウの View (ManagerDraw)を設定します。
これで描画ビューの設定が完了しました。

表示するアニメーションを設定する

1.MainObject の Inspector にある Movie Demo (Script)項目の中に、 File Name Listという項目があります。
この項目を開きます。 

2.Sizeという項目が表示されます。ここに再生するアニメーション数を設定します。
ここでは 2つのアニメーションを再生しますので、 2 と設定します。

数字を設定すると、「Element 0」「Element 1」という項目が増えます。

3.「Element 0」の項目に、再生するアニメーションを設定します。
ここでは再生アニメーションの Script_SpriteStudio_Root をScript上で取得するため、各アニメーションのPrefab の中にあるリソースを設定します。

再生アニメーションのパスはResourcesと命名されたフォルダからの相対パスになります。

ここでは、

Element 0に「kumui_00/Prefab/kumui_00」
Element 1に「s_koharu_games/Prefab/00_preview」

を設定しました。

右図では「s_koharu_games/Prefab/00_preview」の場所を表示しています。

再生する

Unityの再生ボタンを押すと、設定したアニメーションが順番に表示されます。

スクリプトのソースコード

今回アニメーションの制御に使用した「MovieDemo.cs」のコードは以下の通りです。

MovieDemo.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MovieDemo : MonoBehaviour
{
	//アニメションを表示するView
	[SerializeField]
	public Script_SpriteStudio_ManagerDraw RenderingView;

	//再生アニメーションのresourcesフォルダ内のサブパス
	[SerializeField]
	public string[] FileNameList;

	//現在再生しているアニメーション番号
	private int m_Index;

    //スプライトスタジオアニメを操作するためのクラス
	private Script_SpriteStudio_Root m_ScriptRoot;

	void Start()
	{
		//初期化
		m_Index = 0;
		m_ScriptRoot = null;
	}
	
	void Update()
	{
		//アニメーションを再生していないなら再生を開始する
		if(m_ScriptRoot == null)
		{
			if(m_Index >= 0)
			{
				//最初のアニメーションを再生
				animationStart(m_Index);
			}
		}
	}

	void animationStart(int index)
	{
		//初期化
		m_Index = -1;
		m_ScriptRoot = null;

		//再生するリソース名をリストから取得して再生する
		if(FileNameList.Length > 0)
		{
			m_Index = index % FileNameList.Length;
			string resourceName = FileNameList[m_Index];
			if(string.IsNullOrEmpty(resourceName) == false)
			{
				//アニメーションを実体化
				GameObject go = Instantiate(Resources.Load(resourceName), new Vector3(0, 0, 0), Quaternion.identity) as GameObject;
				if(go != null)
				{
					m_ScriptRoot = Library_SpriteStudio.Utility.Parts.RootGetChild(go);
					if(m_ScriptRoot != null)
					{
						//表示する描画マネージャーを設定
						m_ScriptRoot.InstanceManagerDraw = RenderingView;
						//アニメーション終了コールバックを設定.
						m_ScriptRoot.FunctionPlayEnd = callbackPlayEnd;
						//アニメーション再生
						m_ScriptRoot.AnimationPlay(0, 1, 0, 1.0f);
					}
				}
			}
		}
	}

	bool callbackPlayEnd(Script_SpriteStudio_Root InstanceRoot, GameObject ObjectControl)
	{
		//再生しているアニメーションの操作クラスを初期化
		m_ScriptRoot = null;

		//次回のUpdateで次のアニメーションを再生開始
		m_Index++;

		//古いアニメーションはシーンから消す
		return false;
	}
}

関連ページ