[Unity] ドラッグ&ドロップ一切使わずスクリプトのみでいろいろ取り込みより
再生形式やインポートの不具合(記事)に苦しめられたうえに、ビルド後の仕上がりを見てMovieTextureになんとなく嫌気がさしてきたところで、VideoPlayerというものがとっくに存在することを確認
##やること
上リンクと同じ、スクリプトだけで動画を再生。
##MovieTextureとの違い
MovieTextureは動画(イメージ)をテクスチャとしてオブジェクト(平面など)に貼り付けるのに対して、VideoPlayerは動画をクリップとして扱えるため直感的で扱いやすく、機能も動画用に特化してて豊富。
url、clipから読み込める事ができることを確認。
##早速
using UnityEngine.Video;
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)へ
###その他
//動画のレンダリングの仕方。デフォルトだとカメラが見れる一番遠く(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開発記事一覧
こちらから