PR

Unityダイアログボックスを使って動画を開く方法

はじめに

UnityではUnityStandaloneFileBrowserアセットを使うことによってダイアログボックスを使ってUnity側に読み込ませることができます。
ダイアログボックスとは、下の画像のようなウィンドウのことです。

今回はUnityStandaloneFileBrowserアセットを使って動画を読み込んで再生いきたいと思います。

その1.アセットの導入

下のボタンをクリックして、UnityStandaloneFileBrowserアセットの配布ページに行ってください。

次に配布ページから、①Download Packageをクリックしてアセットをダウンロードしてください。

次にダウンロードしたアセットファイルをUnityのProject内にドラッグアンドドロップしてください。
次にImportUnityPackageウィンドウが出てくるので右下のImportを押してください。

Importボタンを押すとアセットをプロジェクトにインストールするので少々お待ちください。
インストールが終了したらProjectのAssets内に①「StandaloneFileBrowser」フォルダが作成されていると思います。
これでアセットの導入は完了です。

その2.下準備

次にヒエラルキー内を右クリックして、①UIをクリックして②Legacyをクリックして③Buttonの順番にクリックしてください。

次にヒエラルキー内にあるCanvasを右クリックして①UIをクリックして②RawImageをクリックしてください。
このRawImageに動画を表示させるので、お好みのサイズにに調整してください。

Canvas内のButtonとRawImageが以下の順番になっていない場合は下の画像のようにButtonがRawIamgeの下側になるように配置してください。

次にCanvasを右クリックして①Videoをクリックして②VideoPlayerをクリックしてください。

VideoPlayerコンポーネントの設定を下の画像のように設定してください。

その3.スクリプトを記述

次にDialogBoxToOpenVideoという名前のスクリプトを作成してください。
作成したスクリプトのusing UnityEngine;の下にusing UnityEngine.UI;とusing UnityEngine.Video;とusing SFB;とusing System.IO;を追加してください。

C#
using UnityEngine;
using UnityEngine.UI;//これを追加してください
using UnityEngine.Video;//これを追加してください
using SFB;//これを追加してください
using System.IO;//これを追加してください

次にダイアログを開き動画を読み込むための関数を書いていきます。

C#
    /// <summary>
    /// クリック時にダイアログを開く
    /// </summary>
    public void OnClickOpenDialog()
    {
        var extensions = new[] { new ExtensionFilter("動画ファイル", "mp4", "mov") };
        var paths = StandaloneFileBrowser.OpenFilePanel("動画ファイル", "", extensions, false);
        if (paths.Length > 0)
        {
            Debug.Log("Paths=>" + paths[0]);
            PlayPathToVideo(paths[0]);
        }
    }

次にパスから動画を再生するためのスクリプトを書いていきます。

C#
    /// <summary>
    /// パスから動画を再生する
    /// </summary>
    /// <param name="path">動画のパス</param>
    private void PlayPathToVideo(string path)
    {
        videoPlayer.url = path;

        videoPlayer.prepareCompleted += OnPrepareCompleted;
        videoPlayer.Prepare();
    }

    /// <summary>
    /// 準備完了時の処理
    /// </summary>
    /// <param name="videoPlayer"></param>
    private void OnPrepareCompleted(VideoPlayer videoPlayer)
    {
        rawIamge.texture = videoPlayer.texture;

        videoPlayer.Play();
    }

スクリプトの全体は以下の通りです。

C#
using SFB;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Video;

public class DialogBoxToOpenVideo : MonoBehaviour
{

    public RawImage rawIamge;

    public VideoPlayer videoPlayer;



    /// <summary>
    /// クリック時にダイアログを開く
    /// </summary>
    public void OnClickOpenDialog()
    {
        var extensions = new[] { new ExtensionFilter("動画ファイル", "mp4", "mov") };
        var paths = StandaloneFileBrowser.OpenFilePanel("動画ファイル", "", extensions, false);
        if (paths.Length > 0)
        {
            Debug.Log("Paths=>" + paths[0]);
            PlayPathToVideo(paths[0]);
        }
    }



    /// <summary>
    /// パスから動画を再生する
    /// </summary>
    /// <param name="path">動画のパス</param>
    private void PlayPathToVideo(string path)
    {
        videoPlayer.url = path;

        videoPlayer.prepareCompleted += OnPrepareCompleted;
        videoPlayer.Prepare();
    }

    /// <summary>
    /// 準備完了時の処理
    /// </summary>
    /// <param name="videoPlayer"></param>
    private void OnPrepareCompleted(VideoPlayer videoPlayer)
    {
        rawIamge.texture = videoPlayer.texture;

        videoPlayer.Play();
    }

}

その4.作成したスクリプトをアタッチ

先ほど作成したDialogBoxToOpenVideoスクリプトをCanvas内にアタッチしてください。
次にアタッチしたスクリプトのrawImageに配置したRawImageをドラッグアンドドロップしてください。

次にvideoPlayerに配置したVideoPlayerをドラッグアンドドロップしてください。

次に配置したボタンオブジェをクリックして、ButtonコンポーネントのOn Click()右下のプラスを押してください。

次にNone (Object)の部分にCanvas(スクリプトを配置したオブジェ)をドラッグアンドドロップしてください。

次にNo Functionをクリックしてください。

次に①DiallogBoxToOpenVideoをクリックして、②OnClickOpenDialogの順番にクリックしてください。

動作確認

最後に、ダイアログボックスを開いて動画が再生できるか確かめてみましょう!
まずシーンを再生してボタンをクリックすると、ダイアログボックスが出てくると思います。

ダイアログボックスから再生したい動画を選択してください。
選択をし終えると動画が再生されます。

最後に

今回はUnityダイアログボックスを使って動画を開く方法について紹介しました。

ここまで読んでいただいてありがとうございました。
私たちはプペポタイピングという自由に問題やテーマを作ったり遊んだりできるゲームを
開発しています!
もし興味を持って頂けたのであれば遊んで頂けるとありがたいです!!