
インターホンの画面に動画を流してみました。
まずヒエラルキーでVideoPlayerを作りプレハブ化しました。インスペクタでVideo Clipに再生する動画をアタッチし、Play On AwakeとLoopにチェックを入れ、Render ModeをRender Textureにしました。

これでインスタンスができるとすぐにループ再生されます。また、Target Textureに設定されたレンダーテクスチャに動画が映ります。
進行管理のスクリプトではまずこのVideoPlayerをインスタンス化します。再生するのと同時にインスタンス化するとロードのために遅延が起こるので、前もってインスタンス化しておきました。
Video.VideoPlayerのPrepareメソッドを使うと再生する前にロードしておくこともできます。
- [SerializeField] GameObject intercom;
- [SerializeField] GameObject intercomVideo;
- Texture displayTexture;
-
- // 準備
- void A(){
- // VideoPlayerをインスタンス化する
- intercomVideo = Instantiate(/* ... */ );
- }
-
- // 画面をつける
- void B(){
- // インターホンの画面部分のマテリアルを取得
- Material mat = intercom.GetComponent<MeshRenderer>().materials[1];
-
- // 画面のテクスチャを保存
- displayTexture = mat.GetTexture("_BaseColorMap");
-
- // レンダーテクスチャを新規作成
- RenderTexture ren = new RenderTexture(256, 256, 16, RenderTextureFormat.ARGB32);
-
- // VideoPlayerにレンダーテクスチャをセット
- intercomVideo.GetComponent<UnityEngine.Video.VideoPlayer>().targetTexture = ren;
-
- // 画面のマテリアルにレンダーテクスチャをセット
- mat.SetTexture("_BaseColorMap", ren);
-
- }
-
- // 画面を消す
- void C()
- {
- // インターホンの画面部分のマテリアルを取得
- Material mat = intercom.GetComponent<MeshRenderer>().materials[1];
-
- // 画面のテクスチャをもとに戻す
- mat.SetTexture("_BaseColorMap", displayTexture);
-
- // VideoPlayerオブジェクトを破壊
- Destroy(intercomVideo);
- }
インターホンは画面部分とそれ以外とでマテリアルが別れているので、映像を流すときは、画面部分のマテリアルを取得して、今のテクスチャを変数に入れておき、消すときにそれをセットします。
そして、new演算子でレンダーテクスチャのインスタンスを作り、VideoPlayerコンポーネントのtargetTextureと画面のマテリアルのアルベドマップにセットします。するとインターホンの画面に映像が流れます。

消すときは元のテクスチャをセットします。VideoPlayerオブジェクトの破壊もしました。