Unity AddressableAssets +VideoPlayer

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

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值