検証時の環境
- Unity 2019.4.51
利用した動画素材サイト https://pixabay.com/ja/videos/
はじめに
Unity で動画素材を扱う際に Video Player を扱いますが, 一度SetActive(false)で非表示した後,SetActive(true)で再表示すると, はじめから再生されてしまいます.
解決方法
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ボタンには動画非表示制御を行っております.
シーン例
動作確認
初めから再生されずに途中再生できるようになりました.
終わりに
非表示にする前のScaleが1でない場合は調整するか,値を保持するようにスクリプトの改変を行ってください.