#概要
Unityのバージョンは2019.3
Unityで動画再生をするためのメモです。
標準コンポーネントの VideoPlayer と Asset の AVProVideo の使い方を説明。
VideoPlayer のコンポーネントの内容はマニュアルを見ると詳しく載っています。
https://docs.unity3d.com/ja/2018.4/Manual/class-VideoPlayer.html
AVProVideo のドキュメントはストアページからダウンロードできます(ただし英語)
https://assetstore.unity.com/packages/tools/video/avpro-video-56355
Assetは各OS向けに安いものも提供されているのでWindowsでしか使わないならそちらWindows版のみ購入した方がいい
#VideoPlayer の使い方
uGUI の RawImage に動画を表示する
- シーンに RawImage を追加して Add Component > Video > Video Player で追加
- Assets で右クリックし Create > Render Texture を作成
- 作成した Render Texture を Raw Image の Texture と Video Player の TargetTexture にアタッチする
- Video Player の Source を選択
- Asset内のファイルを再生するなら Video Clip を選択して再生するファイルをアタッチする
- 外部ファイルを再生するなら URL を選択して再生するファイルのパスを指定する
- Play on Awake にチェックを入れると、シーン起動時にビデオ再生を開始
- Loop にチェックを入れると、ビデオ再生を繰り返す
参考ページ
https://xr-hub.com/archives/15798
https://gametukurikata.com/basic/videoplayer
https://goisagi-517.hatenablog.com/entry/2018/12/29/131952
#VideoPlayer のSprict制御
using UnityEngine.Video;
VideoPlayer video = this.GetComponent<VideoPlayer>();
// 再生するファイル指定
video.url = System.Environment.CurrentDirectory + @"\movie\file.mp4";
// 再生時に呼ばれるイベント登録
video.started += OnStarted;
// 終了時に呼ばれるイベント登録
video.loopPointReached += OnLoopPointReached;
// 再生
video.Play();
// 停止
video.Stop();
void OnStarted(VideoPlayer vp)
{
Debug.Log("start");
}
void OnLoopPointReached(VideoPlayer vp)
{
Debug.Log("End");
}
参考ページ
https://docs.unity3d.com/ja/2018.4/ScriptReference/Video.VideoPlayer.html
https://atsushishi.xyz/2017/12/videoplayer_support/
#AVProVideo の使い方
Display uGUIに動画を表示する
- AVProVideo をインポートして Component > AVPro Video > Media Player で追加
- Media Player の Source Path で Relative To Streaming Assets Folder を ABsolute Path Or URL に変更
- ここに再生するファイルパスを指定する
- Auto Open は動画ファイルをスクリプトで指定するのでチェックをはずす
- Auto Play も自動で再生されないようにチェックをはずす
- Canvas の下に空の GameObject を追加して > Add Component > AVPro Video > Display uGUI を追加
- Display uGUI の Media Player にさっき作った Media Player オブジェクトをアタッチ
- Default Texture にテクスチャを指定して No Default Display のチェックをはずす(動画再生してないときのサムネイル表示)
参考ページ
https://qiita.com/neon-izm/items/d2ab9f10341d54e35163
http://www.asset-sale.net/entry/AVPro_Video180506
#AVProVideo のSprict制御
using RenderHeads.Media.AVProVideo;
MediaPlayer avPro = this.GetComponent<MediaPlayer>();
// イベントリスナー登録
avPro.Events.AddListener(OnMediaPlayerEvent);
// ファイル読み込み
string path = System.Environment.CurrentDirectory + @"\movie\file.mp4";
avPro.OpenVideoFromFile(MediaPlayer.FileLocation.AbsolutePathOrURL, path, ture);
// リトライ
avPro.Rewind(false);
void OnMediaPlayerEvent(MediaPlayer mp, MediaPlayerEvent.EventType et, ErrorCode ec)
{
switch (et)
{
case MediaPlayerEvent.EventType.MetaDataReady: // 読み込み時のイベント
// 再生
avPro.Play();
break;
case MediaPlayerEvent.EventType.FinishedPlaying: // 再生終了時のイベント
// 閉じる
avPro.CloseVideo();
break;
}
}
AVProVideoをインポートすると中にサンプルがあるのでこれが参考になる(Demos > Scenes)
#VideoPlayer と AVProVideo の比較
- 軽い動画を再生させるだけなら VideoPlayer だけで十分(パフォーマンスに関しては比較してない)
- 8KやVRの動画再生や字幕つけたりなどやりたいなら AVProVideo が対応しているようなのでこちらを使う方がよさそう