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();
}
}