using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Video;
public class VideoAssetManager : SingletonMonoBehaviour<VideoAssetManager>
{
[SerializeField]
private string label=null;
private List<VideoClip> videoClips = new List<VideoClip>();
private Dictionary<string, int> videoDic = new Dictionary<string, int>();
protected override void Awake()
{
base.Awake();
StartCoroutine(InitVideoClips());
}
//首先根据label得到所有这个Label的ResourceLocation
//然后得到相应key,依次加载,实体加入列表,释放
//同时建立一个名字和列表index的映射字典
private IEnumerator InitVideoClips()
{
var location = Addressables.LoadResourceLocationsAsync(label);
yield return location;
for (int i = 0; i < location.Result.Count; i++)
{
string clip = location.Result[i].PrimaryKey;
var asyncOperationHandle = Addressables.LoadAssetAsync<VideoClip>(clip);
yield return asyncOperationHandle;
videoClips.Add(asyncOperationHandle.Result);
videoDic[clip] = i;
Addressables.Release(asyncOperationHandle);
}
Debug.Log("==========InitVideo=============");
}
public VideoClip GetVideoClip(string clip)
{
if (videoDic.ContainsKey(clip))
return videoClips[videoDic[clip]];
else
return null;
}
}
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using UnityEngine.Video;
public class VideoController : SingletonMonoBehaviour<VideoController>
{
public VideoPlayer m_videoPlayer;
protected override void Awake()
{
base.Awake();
}
public void ChangeVideo(string name)
{
var clip= VideoAssetManager.Instance.GetVideoClip(name);
if (clip!=null)
{
PlayVideo(clip);
}
else
{
Debug.LogError("No"+name);
}
}
private void PlayVideo(VideoClip audioClip)
{
m_videoPlayer.clip = audioClip;
m_videoPlayer.Play();
}
public void StopVideo()
{
m_videoPlayer.targetTexture.Release();
m_videoPlayer.Stop();
m_videoPlayer.clip=null;
}
}