うにてぃブログ

主にUnityとC#に関する記事を書いていきます

【Unity】VideoPlayer で複数のクリップを連続再生し続ける

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Video;
 
[RequireComponent(typeof(RawImage))]
[RequireComponent(typeof(VideoPlayer))]
public class VideoPlayerMultiClip : MonoBehaviour
{
    [SerializeField]
    private VideoPlayer _videoPlayer;
 
    [SerializeField]
    private RawImage _rawImage;
 
    [SerializeField]
    private VideoClip[] _clips;
 
    private int _index;
  
    private void Reset()
    {
        _rawImage = GetComponent<RawImage>();
        _videoPlayer = GetComponent<VideoPlayer>();
        _videoPlayer.renderMode = VideoRenderMode.APIOnly;
        _videoPlayer.playOnAwake = false;
    }
 
    private void Awake()
    {
        _rawImage.enabled = false;
        _index = 0;
        PrepareVideoPlayer();
 
        Play(_clips[_index]);
    }
 
    private void PrepareVideoPlayer()
    {
        _videoPlayer.frameReady += (vp, frame) =>
        {
            if (!_rawImage.enabled)
                _rawImage.enabled = true;
            _rawImage.texture = _videoPlayer.texture;
        };
         
        _videoPlayer.prepareCompleted += vp =>
        {
            _videoPlayer.Play();
        };
        // 終了したタイミングで停止して次のクリップを再生する 
        _videoPlayer.loopPointReached += v =>
        {
            _index = (_index + 1) % _clips.Length;
            _videoPlayer.Stop();
            Play(_clips[_index]);
        };
    }
 
    public void Play(VideoClip clip)
    {
        _videoPlayer.clip = clip;
        _videoPlayer.sendFrameReadyEvents = true;
        _videoPlayer.Prepare();
    }
}