CriManaMovieController
- CRI Sofdecにおけるムービ再生の制御は、「CriManaMovieController コンポーネント」により行います。
- CriManaMovieController コンポーネントのムービ再生パラメータを「Inspector」で設定することができます。
各種パラメータについては CriWare.CriManaMovieController の詳細をご確認ください。 以下、シンプルな使い方を説明します。
- Unity Editor の Inspector 上から MoviePath にムービファイル名を入力してください。 ディレクトリ名を付けずに、ファイル名だけを指定するようにしてください(例:sample_256x256.usm)。 ムービファイルは StreamingAssets フォルダ下に配置してください。
カスタムシェーダの利用
- CriManaMovieController では、ムービの描画に使用するシェーダを変更することができます。 シェーダを変更するには、CriManaMovieController.player.SetShaderDispatchCallback メソッドを使います。 本メソッドを使うことで、シェーダ割り当てのためのコールバック関数を登録することができます。 例えば、CriManaMovieController コンポーネントがアタッチされたオブジェクトに対して、次のようなクラスをアタッチするのが容易です。
public class AttacheUserCustomShader : MonoBehaviour {
void OnEnable () {
CriManaMovieController controller = GetComponent<CriManaMovieController>();
controller.player.SetShaderDispatchCallback(ShaderDispatch);
}
static UnityEngine.Shader ShaderDispatch(MovieInfo movieInfo,
bool additiveMode)
{
if (movieInfo.codecType != CodecType.SofdecPrime) {
Debug.LogError("Unknonw codec type");
return Shader.Find("VertexLit");
}
return Shader.Find(additiveMode ? "加算合成用のシェーダ名" : "加算合成用でないシェーダ名");
}
}
なお、登録はムービの再生前に行う必要があります。ご注意ください。
カスタムシェーダの作成
- カスタムシェーダはShaderLab言語で記述します。
デフォルトのシェーダは以下の場所にありますので、これを参考にしてカスタムシェーダを作成してください。
なお、ShaderLab言語についてはUnityのリファレンスを参照してください。
CriManaMovieControllerForUI
- 本コンポーネントは Unity UI 上でムービ再生するために使います。基本的な使い方は CriManaMovieController と同じですが、CriManaMovieControllerForUI.target は UnityEngine.Renderer ではなく UnityEngine.UI.Graphic を受け取ります。
コンポーネントを破棄する際の注意事項
- 本コンポーネントに対しDestroyを実行する際、内部的には状態遷移の完成を待つ停止関数を呼び出しており、再生中の破棄にも対応はしています。
ただし、テクスチャに対する描画中に破棄処理を実行すると、タイミングによっては意図しない不具合が顕現する可能性があります。
そのため、可能な限り明示的に再生を停止し、停止状態への遷移を待ってからコンポーネント破棄するような使い方をおすすめしております。
CriManaPlayerからCriManaMovieControllerへの移行
- CriManaPlayer から CriManaMovieController に以降する際の注意点について説明します。
UnityEditor 上での移行
- CriManaPlayer コンポーネントがアタッチされているオブジェクトをインスペクター上に表示してください
- CriManaPlayer コンポーネントをRemoveしてください
- CriManaMovieController コンポーネントをアタッチしてください
CriManaPlayer コンポーネントの以下のプロパティは、CriManaMovieController コンポーネントにはありません。
- Flip Top/Bottom
- Flip Left/Right
- Volume
Flip プロパティは、 Unity API の Material クラスの SetTextureOffset メソッドを使うことにより、プログラム上で置き換えが可能です。
Volume プロパティは、CriMana.Player クラスの SetVolume メソッドで置き換え可能です。
スクリプト上での移行
CriManaPlayer コンポーネントを CriManaMovieController コンポーネントに置き換えてください。
メソッド、プロパティの主な(基本的な)メンバの対応関係を以下に示します。
CriManaPlayer と CriManaMovieController の対応関係
CriManaPlayer | CriManaMovieController |
SetFile | player.SetFile |
Play | player.Start |
Stop | player.Stop |
status | player.status |
以下にスクリプトの実装方法の置き換え例を示します。
置き換えの際の参考にしてください。
- CriManaPlayer(置き換え前)
public GameObject movieObject;
private CriManaPlayer moviePlayer;
private CriFsBinder binder;
moviePlayer = movieObject.AddComponent<CriManaPlayer>();
moviePlayer.SetFile(binder, "sample.usm");
moviePlayer.Play();
- CriManaMovieController(置き換え後)
public GameObject movieObject;
private CriManaMovieController moviePlayer;
private CriFsBinder binder;
moviePlayer = movieObject.AddComponent<CriManaMovieController>();
moviePlayer.useOriginalMaterial = true;
moviePlayer.player.SetFile(binder, "sample.usm");
moviePlayer.player.Start();