C#
Unity
HoloLens

Unity 5.6からの動画再生機能 VideoPlayerで動画再生

More than 1 year has passed since last update.

[Unity] ドラッグ&ドロップ一切使わずスクリプトのみでいろいろ取り込みより

再生形式やインポートの不具合(記事)に苦しめられたうえに、ビルド後の仕上がりを見てMovieTextureになんとなく嫌気がさしてきたところで、VideoPlayerというものがとっくに存在することを確認


やること

上リンクと同じ、スクリプトだけで動画を再生。


MovieTextureとの違い

MovieTextureは動画(イメージ)をテクスチャとしてオブジェクト(平面など)に貼り付けるのに対して、VideoPlayerは動画をクリップとして扱えるため直感的で扱いやすく、機能も動画用に特化してて豊富。

url、clipから読み込める事ができることを確認。


早速


Using

using UnityEngine.Video;



VideoPlayer


VideoPlayer videoPlayer;
VideoClip videoClip;

void play_byClip()
{
GameObject plane = GameObject.Find("Plane");
//すでに存在するアセット(ライトやカメラ)に予めVideoPlayerを付けておくか、AddComponentで取得
videoPlayer = GetComponent<VideoPlayer>();

//記入漏れ clip使う際のみ必要です
videoPlayer.targetMaterialRenderer = plane.GetComponent<Renderer>();
vp.clip = vc;
vp.play();
}

void play_byURL(string _url)
{
/**************
    ほぼ一緒 clipの部分だけ削除
**************/

vp.url = _url;

// 2017年07月06日追記
if(vp.isPrepared)
{
vp.play();
}
}



「最低限」を脱するために


音声

MovieTextureのときと同じく同時にAudioSource再生かな。

VideoPlayerにaudioあるからうまく使いたいところ。


VideoPlayerにスクリプトで音をつけたい (http://qiita.com/gshirato/items/88096b0b350f5921f8d4)


その他


ScriptingAPIより


//動画のレンダリングの仕方。デフォルトだとカメラが見れる一番遠く(Far)でレンダリングするっぽい 
//カメラの設定を使う場合はスクリプトをカメラにアタッチしたほうが良いかも
videoPlayer.renderMode = VideoRenderMode.CameraNearPlane;
//開始フレームの設定(最初にスキップするフレームの数)
videoPlayer.frame = 100;
//ループONに
videoPlayer.isLooping = true;
//動画が最後まで来たときのループ処理
videoPlayer.loopPointReached += Loop;

//引数ないと怒られます
void Loop(VideoPlayer vp)
{
print("LoooooP");
}


など


VideoRenderMode

Mode
説明

CameraFarPlane
Far位置にレンダリング(背景化?)

CameraNearPlane
Near位置にレンダリング(とにかく動画だけ見える)

MarterialOverride
Rendererに上書き(Planeなどに貼る場合はコレ)

RenderTexture
Renderer Textureに使う(あまり使い方にピンときてないです)

APIOnly
データだけ使う、レンダリングなし


参考

Unity Documentation: VideoPlayer


HoloLens開発記事一覧

こちらから