強火で進め

このブログではプログラム関連の記事を中心に書いてます。

Unity 5.6 から使える VideoPlayer をカメラの正面で再生する方法

こんなコードで再生できます。このサンプルではカメラの最前面にレンダリングされる様に設定していますが最背面や3Dオブジェクト上で再生させる事も可能です。
※サンプルでは WebM ファイルを使っていますが MP4(H.264/AAC) の方がハードウェアアクセラレータ対応の環境では動作が軽いので実際にリリースするものではなるべく MP4 を使いましょう。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Video;

public class FullscreenPlay : MonoBehaviour {
	VideoPlayer videoPlayer;

	void Start()
	{
		// ローカルファイルを再生
		PlayVideo ("Assets/webmtest.webm", false);

		// Web上のファイルを再生
		//PlayVideo ("https://raw.githubusercontent.com/nakamura001/WebMAlphaSample/master/WebM/sample_vp8.webm", true);
	}

	void PlayVideo(string url, bool internet) {
		// ※ Main Camera には VideoPlayer コンポーネントを追加しておく
		GameObject camera = GameObject.Find("Main Camera");

		videoPlayer = camera.AddComponent<VideoPlayer>();

		// レンダリング場所はカメラの最前面。動画の手前に3Dオブジェクトなどを表示したい場合は VideoRenderMode.CameraFarPlane を使用
		videoPlayer.renderMode = VideoRenderMode.CameraNearPlane;

		//videoPlayer.targetCameraAlpha = 0.5F; // 動画全体のアルファ値設定

		// ファイルパス or URL の指定
		videoPlayer.url = url;

		// 再生開始のフレーム数
		//videoPlayer.frame = 100;

		// ループ設定
		videoPlayer.isLooping = true;

		// ループが行われるタイミングでのイベント。このサンプルでは再生速度を 1/10 にしている
		videoPlayer.loopPointReached += EndReached;

		if (internet) {
			// Web 上からダウンロードする場合には先読みをしておく。
			// 先読みしなくてもエラーは発生しません。再生ボタンを押した後にすぐに再生したい場合には先読みを行います
			Debug.Log ("Prepare");
			videoPlayer.prepareCompleted += PrepareCompleted;
			videoPlayer.Prepare ();
		} else {
			Debug.Log ("Play");
			videoPlayer.Play();
		}
	}

	void PrepareCompleted(VideoPlayer vp) {
		vp.prepareCompleted -= PrepareCompleted;
		Debug.Log ("Play");
		vp.Play();
	}

	void EndReached(VideoPlayer vp)
	{
		Debug.Log ("Loop");
		vp.playbackSpeed = vp.playbackSpeed / 10.0F;
	}
}

VideoRenderMode ではビデオのレンダリング場所を設定します。 CameraNearPlane 以外にも以下のものが使用可能です。

説明
CameraFarPlane カメラの一番奥(Far Plane)の位置にレンダリング
CameraNearPlane カメラの最前面(Near Plane)の位置にレンダリング
RenderTexture Render Texture にレンダリング
MaterialOverride 現在設定されている Material を上書きしてレンダリング
APIOnly 直接画面にはレンダリングせず、プログラム内で Texture プロパティを使いたい時に使用

Unity - Scripting API: VideoRenderMode
https://docs.unity3d.com/560/Documentation/ScriptReference/Video.VideoRenderMode.html

今回のサンプルはこちらからダウンロード可能です。 Sample2 のシーンが今回のサンプルです。

nakamura001/Unity-VideoPlayerSample: Unity 5.6から追加された Video Player のサンプル
https://github.com/nakamura001/Unity-VideoPlayerSample