首先说下我想实现的效果,有一些视频,每一组都由2段视频组成:前一段播放一次(入场),然后接循环播放后一段(循环)
看代码:
private string tmpVideoLoop;
private void PlayVideo(string videoLoop, string videoStart = null)
{
GetVP().loopPointReached -= PlayVideoLoop;
if (GetVP().isPlaying)
GetVP().Stop();
if (videoStart == null)
{
GetVP().url = videoLoop;
GetVP().isLooping = true;
GetVP().Play();
}
else
{
this.tmpVideoLoop = videoLoop;
GetVP().url = videoStart;
GetVP().isLooping = false;
GetVP().loopPointReached += PlayVideoLoop;
}
}
private void PlayVideoLoop(VideoPlayer vp)
{
Debug.Log(vp.url);
vp.loopPointReached -= PlayVideoLoop;
GetVP().url = tmpVideoLoop;
GetVP().isLooping = true;
GetVP().Play();
}
1. GetVP() 方式是获取 VideoPlayer组件的一个封装方法,
2. PlayVideo(string videoLoop, string videoStart = null),通过URL的方式播放视频,传入两个视频的URL路径
videoLoop——用于循环的视频
videoStart——播放一次的视频
先略过 GetVP().loopPointReached -= PlayVideoLoop,首先如果当前VideoPlayer组件正在播放,那就先停止下,然后切换新的视频组,如果有传入videoStart,则先播放videoStart,并且注册上事件loopPointReached,当播完时开始播放videoLoop
再说说为什么要先加上一个注销事件GetVP().loopPointReached -= PlayVideoLoop,主动停止VideoPlayer的播放GetVP().Stop()也是会触发loopPointReached事件的,这也是一个坑,需要特别注意