【Unity】動画の再生方法 ~ Video Playerの使い方

Unityを動画を再生する標準機能であるVideo Playerの使い方を紹介します。
この記事では、実際に3DオブジェクトやUIにVideo Playerで動画を描画する手順を詳細に説明します。

サンプルアプリ(WebGL)

※プレイするときは一度画面をクリックしてください。

別ページでプレイする場合はこちらから
https://chiritsumo-blog.com/wp-content/uploads/webgl/VideoPlayer/index.html

この記事での対象プラットフォームはStandaloneを想定しています。
WebGLでの使用方法は以下をご確認ください。

環境

  • Windows 10 Home
  • Unity Version 2019.2.17f1

動画をインポートする

再生する動画ファイルをプロジェクトに追加します。

Unityエディタで動画をインポート

インポートした動画ファイルはVideo Clip(ビデオクリップ)として扱われ、Video Playerのソースとして使用することができます。

UnityエディタでVideo Clipの確認

動画を描画するオブジェクトを設置

今回は動画の描画対象用に、3Dオブジェクトの「Sphere」「Cube」「Plane」とUIの「RawImage」を設置します。

UnityエディタでVideo Playerのサンプルシーン

3DオブジェクトにVideo Playerを追加

「Sphere」「Cube」「Plane」のゲームオブジェクトに「Video Player」コンポーネントを追加していきます。
先ほどプロジェクトにインポートしたVideo ClipをHierarchyビューの各オブジェクトにドラッグ&ドロップでアタッチします。

UnityエディタでVideo Clipのアタッチ

Video Clipをオブジェクトにドラッグ&ドロップでアタッチすると、自動的に「Video Player」コンポーネントが追加されます。

UnityエディタでVideo Playerコンポーネントの確認

UI「RawImage」にVideo Playerを追加

UIのRawImageに「Video Player」コンポーネントを追加する方法は上記の3Dオブジェクトの時と少し異なります。

まず、先ほどと同じようにVideo ClipをRaw Imageにドラッグ&ドロップでアタッチします。

UnityエディタでRaw ImageにVideo Clipのアタッチ

次に、Projectビューを右クリック Create > Render Texture をクリックします。

UnityエディタでRender Textureの作成

作成したRender Textureを、RawImageオブジェクトの以下の2か所に設定します。

  • Raw Image コンポーネント > Texture
  • Video Player コンポーネント > Target Textrue

上記の設定で、Render Textureを介してRaw Imageに動画を描画することが可能です。

UnityエディタでRender Textureのアタッチ

Video Playerのスクリプトによる制御

Video Playerはスクリプトから制御することも可能です。

使用したスクリプトの全文

今回実装したスクリプトを参考までに記載します。
処理内容は、各オブジェクトのVideo Playerを「再生」「一時停止」「停止」制御を行います。

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

public class PlayerController : MonoBehaviour
{
    /// <summary>
    /// 制御するVideo Playerのリスト
    /// </summary>
    [SerializeField]
    private List<VideoPlayer> playerList;

    /// <summary>
    /// 再生
    /// </summary>
    public void Play()
    {
        foreach(VideoPlayer player in playerList)
        {
            if (!player.isPlaying)
            {
                player.Play();
            }
        }
    }

    /// <summary>
    /// 一時停止
    /// </summary>
    public void Pause()
    {
        foreach (VideoPlayer player in playerList)
        {
            if (player.isPlaying)
            {
                player.Pause();
            }
        }
    }

    /// <summary>
    /// 停止
    /// </summary>
    public void Stop()
    {
        foreach (VideoPlayer player in playerList)
        {
            player.Stop();
        }
    }
}

処理内容の解説

制御するVideo Player のリスト

下記のplayerListを記述することで、Inspectorウィンドウで複数個のVideoPlayerを設定できます。

[SerializeField]
private List<VideoPlayer> playerList;

再生

Play()関数を「再生」ボタンから呼び出しています。
Video Playerの再生は以下のコードで行います。

player.Play();

一時停止

Stop()関数を「停止」ボタンから呼び出しています。
Video Playerの一時停止は以下のコードで行います。

player.Stop();

参考:
https://docs.unity3d.com/ja/2018.4/Manual/class-VideoPlayer.html
https://docs.unity3d.com/ja/2018.4/Manual/class-VideoClip.html

よく読まれている記事

コメント

  1. […] […]

タイトルとURLをコピーしました