リプレイフレームワーク for Unity

格闘ゲームなどで決着がついたシーンをリプレイ表示するための、リプレイフレームワークを作ってみました。
使えるかどうか分かりませんが、アルファバージョンをGPLにて公開します。
(注)ライセンスは変える可能性があります。

デモ動画


使い方解説動画


構成

クラスの関係は次の通りです。

ReplayManagerを操作して記録や再生を制御します。サンプルに含まれているReplayManagerGUIを参考にしてください。

初期発見と初期化処理
  1. ReplayManagerのInitializeを呼び出すと、シーン中に存在する全てのReplayableコンポーネントを持ったゲームオブジェクトを探し出し、SendMessageを使ってReplayResetを呼び出します。
  2. Replayableを持ったゲームオブジェクトに、ReplayResetが定義されたコンポーネントが含まれていた場合、ReplayResetが呼び出されます。
    1. 初期化処理は任意のコンポーネントを作成し、ReplayResetと言う関数の中で行います。
記録開始と終了
  1. ReplayManagerのStartRecordingを呼び出すと記録が開始されます。
  2. ReplayManagerのStopRecordingを呼び出すと記録が終了します。
リプレイ開始と終了
  1. ReplayManagerのStartReplayを呼び出すとリプレイが開始されます。
  2. ReplayManagerのStopReplayを呼び出すとリプレイが終了します。
プレイバック
  1. ReplayManagerのPlaybackを呼び出すと指定した記録データを各Replayableに設定します。

拡張

任意のコンポーネントを作成し、ReplayTemplateやサンプルを参考にして、該当する関数を実装してください。(いいモジュールができたら教えてくださいw)

public class SomeComponent : MonoBehaviour
{

	public void RecordStarting ()
	{
		//記録開始時の処理を記述します。
	}

	public void RecordStopped ()
	{
		//記録終了時の処理を記述します。
	}

	public void ReplayStarting ()
	{
		//リプレイ開始時の処理を記述します。
	}

	public void ReplayStopped ()
	{
		//リプレイ終了時の処理を記述します。
	}

	public void ReplayReset ()
	{
		//初期化、リセット時の処理を記述します。
	}

	public void ReplayRecording (int dataIdx)
	{
		//フレームごとの記録処理を記述します。
	}

	public void ReplayPlaying (int dataIdx)
	{
		//特定のフレームのリプレイ処理を記述します。
	}

	public void ReplayPlayingComplete (float t)
	{
		//フレームごとのリプレイ処理を記述します。
		//引き数tには、リプレイ開始からの経過時間が渡されます。
		//tはフレーム間で補完を計算するなどに利用できます。
	}