CRIWARE Unity Plugin Manual  Last Updated: 2024-04-24
[CriMana]CPKファイルからの再生

サンプル内容

概要

cri4u_samples_crimana_scene03_screenshot.png

CPKファイル(ファイルマジックPROのパックファイル)の中にあるムービを再生するサンプルです。
ムービ再生に関連する全ての処理をランタイムスクリプトで実装してあります。

サンプルを実行した時点ではムービ再生は始まりません。
次の手順で画面のボタンを操作してムービ再生を行います。
  • (1) [Bind CPK File] ボタンを押して、CPKファイルをバインドする。
  • (2) バインドが完了すると[Bind CPK File] ボタンの文字列先頭に"*"が付き、画面に[Play]ボタンが現れます。
  • (3) [Play]ボタンを押すと、キューブのテクスチャとしてムービを再生開始し、[Play]ボタンが[Stop]ボタンに変わります。
  • (4) ムービ再生中に[Stop]ボタンを押すと、ムービ再生を停止します。
  • (5) [Reset]ボタンを押すとCPKファイルをバインドする前のサンプル初期状態に戻ります。

シーン情報


ミドルウェア CRI Sofdec (CRI Mana)
サンプル Basicサンプル
格納場所 /cri/unity/samples/UnityProject/Assets/Scenes/crimana/basic/
シーンファイル Scene_03_PlaybackCpk.unity


プログラムの解説

ランタイムスクリプトを使って、CPKファイルから再生するサンプルプログラムです。
Unity Editor からの CriManaMovieController コンポーネント設定ではなく、ムービ再生に関連する全ての処理をスクリプトで処理しています。
CPKファイルのバインドおよび、再生開始/再生停止の処理は Scenes/Scene_03_PlaybackCpk のスクリプトに記述してあります。

CPKファイルのバインドについて

CPKファイルのバインド処理はファイルマジックPROのサンプルプログラムと同等の処理ですので、ここでは説明を省略します。 詳細はファイルマジックPROサンプル(「 [CriFs]CPKファイル(パッキングファイル)の読み込み 」)を参照してください。
本サンプルではコルーチンを使ったバインド処理で実装してありますが、コルーチンを使わずファイルマジックPROの状態ポーリングで実装することも可能です。 それぞれ、ファイルマジックPROサンプル(「 [CriFs]ファイルの読み込み 」)を参照してください。

CriManaMovieController コンポーネントの追加

本サンプルでは CriManaMovieController コンポーネントをスクリプト内でゲームオブジェクトに追加しています。

moviePlayer = movieObject.AddComponent<CriManaMovieController>();

バインダおよびファイル名に指定

CPKファイルをバインドしたバインダと、CPKファイル内のコンテンツファイル名を指定してムービ再生を開始します。
コンテンツファイル名とは、CPKファイル名の事ではなく、CPKファイルにパックされた中身のファイル名のことです。

/* Set the binder and the file name. */
moviePlayer.player.SetFile(binder, movieFilename);
/* Start a playback. */
moviePlayer.player.Start();

再生停止処理

CriManaMovieController クラスの再生停止関数は、再生停止リクエストを発行するだけの関数です。実際に再生が停止したかどうかはCriManaMovieController クラスの再生状態がStopになるのを待ってください。
本サンプルでは再生停止待ちで処理落ちしないようにするため、ローカルループで待つのではなく定期的に再生状態を監視するように実装しています。
Stop状態になったら、CriManaMovieController クラスを破棄しています。

switch (this.moviePlayer.player.status) {
case CriMana.Player.Status.Playing:
/* The Stop button processing. */
if (Scene_00_GUI.Button("Stop")) {
moviePlayer.player.Stop();
}
break;
case CriMana.Player.Status.PlayEnd:
/* Call the Stop() even when the playback is finished. */
moviePlayer.player.Stop();
break;
case CriMana.Player.Status.Stop:
/* Destroy the CriManaMovieController. */
Destroy(moviePlayer);
break;
}