はじめに
Unity の シーン中で Video Player を用いたストリーミングで複数の動画を同時に再生したかったのですが、リクエストが複数飛ぶことによる負荷や遅延が生じたときに再生タイミングがずれることなどに悩まされまして、その際の対処について記します。
方法
あらかじめすべての動画を一つの画面の中にまとめて出力しておき、ストリーミング元に置いておいて、読み込んだあとUnityシーン中で分割する方法をとりました。
セッティング
Video のストリーミング
シーン中の Video Player は一つだけにして、その出力先を動画ファイルと同じアスペクト比のRender Texture にします。今回は1:2 の動画を5つ表示したかったので、横に並べてつなげた5:2の動画・Render Texture を用意します。
確認
普通にPlane に Render Texture を適用するとこのようになります。
表示用のマテリアル
表示する箇所ごとにマテリアルを用意します。シェーダは共通で Unlit Shader のデフォルトのものでかまいません。
5つのPlaneを用意し、それらにこのマテリアルを適用します。次に、Inspector からテクスチャとして先ほどのレンダーテクスチャを選び、に適用すると、次のようになります。
タイリングとオフセット
次に、uv座標とレンダーテクスチャ上のピクセルとの関係を設定していきます。
次のように設定すると、左端の領域だけが表示されるようになります。
これは、tiling で 横方向のuv座標を 0 ~ 0.2 の範囲に再設定しています。
さらに、offset のx成分を0.2ずつずらしていくと、次のような結果が得られます。
これは上記のuv座標範囲を設定した値だけずらす処理に相当し、左から 0.0~0.2, 0.2~0.4 ... となっています。