Video Player を非表示から再度表示する際に初めから再生されずに途中再生させる

検証時の環境

  • Unity 2019.4.51

利用した動画素材サイト
https://pixabay.com/ja/videos/

はじめに

Unity で動画素材を扱う際に Video Player を扱いますが,
一度SetActive(false)で非表示した後,SetActive(true)で再表示すると,
はじめから再生されてしまいます.

f:id:xrdnk:20200728184756g:plain

解決方法

SetActive で表示・非表示の制御を行うのではなく,
オブジェクトのScaleを1か0で表示・非表示の制御を行えば,
動画は再生されたまま,非表示状態になります.

そこで非表示状態にする際に,動画を一時停止し,
再度表示状態にする際に,動画を再生させれば良いです.

サンプルスクリプト

サンプルスクリプトはこんな感じ.

using UnityEngine;
using UnityEngine.Video; // VideoPlayer利用のために必要

public class VideoPlayerController : MonoBehaviour
{
    [SerializeField, Tooltip("Video Player を持つオブジェクト")]
    private GameObject _gameObject;

    // キャッシュ
    private VideoPlayer _videoPlayer;

    private void Start()
    {
        _videoPlayer = _gameObject.GetComponent<VideoPlayer>();
    }

    /// <summary>
    /// 動画を表示する
    /// </summary>
    public void ActiveVideoPlayer()
    {
        _gameObject.transform.localScale = Vector3.one;
        _videoPlayer.Play();
    }

    /// <summary>
    /// 動画を表示させない
    /// </summary>
    public void DeactiveVideoPlayer()
    {
        _gameObject.transform.localScale = Vector3.zero;
        _videoPlayer.Pause();
    }
}

適当な動画をPlaneにアタッチし,ACTIVEボタンには動画表示制御,
DEACTIVEボタンには動画非表示制御を行っております.

ヒエラルキー
f:id:xrdnk:20200728183224p:plain

シーン例
f:id:xrdnk:20200728183243p:plain

動作確認

f:id:xrdnk:20200728184822g:plain

初めから再生されずに途中再生できるようになりました.

終わりに

非表示にする前のScaleが1でない場合は調整するか,値を保持するようにスクリプトの改変を行ってください.