本次Demo演示工具介绍:Unity版本:2020.3.25,Visual Studio版本: 2020;
1:使用Unity新建一个工程,新建空场景并保存,然后在Project面板下新建几个文件夹:Res,Resources,Scence,Scripts,此三个文件夹放一个根目录VideoPlayerDemo,目录如下;这是我的习惯,大家随意;

2:Res文件夹下创建一个Render Texture,Hierarchy面板下创建一个画布,再创建RawImage,相机设置为纯色渲染,Projection设置为Orthographic模式,画布设置ScreenSpace_Camera模式,并将主相机赋值给画布的渲染相机,RawImage设置为随画布拉伸的方式,锚点的右下角那个点一下;
3:新建一个面板Controller,将再该面板中编写相关播放控制功能;Slider-进度条,Dropdown-播放速度,两个Text文本设置播放时间,还有个播放按钮。

4:新建类VideoController挂载到控制面板上;

    /// <summary>/// 绑定拖拽功能/// </summary>/// <param name="obj"></param>/// <param name="eventID"></param>/// <param name="action"></param>public static void AddTriggersListener(GameObject obj, EventTriggerType eventID, UnityAction<BaseEventData> action){EventTrigger trigger = obj.GetComponent<EventTrigger>();if (trigger == null){trigger = obj.AddComponent<EventTrigger>();}if (trigger.triggers.Count == 0){trigger.triggers = new List<EventTrigger.Entry>();}UnityAction<BaseEventData> callback = new UnityAction<BaseEventData>(action);EventTrigger.Entry entry = new EventTrigger.Entry();entry.eventID = eventID;entry.callback.AddListener(callback);trigger.triggers.Add(entry);}
   public class VideoController : MonoBehaviour{private Slider slider;private Text totleTimer;private Text culTimer;private Dropdown speedValue;private Button playbtn;private Sprite PlaySP;private Sprite PuaseSP;bool isPause = false;private VideoPlayer video;private void Awake(){slider =Config<Slider>.GetComponent(transform, "ProsseSlider");speedValue = Config<Dropdown>.GetComponent(transform, "SpeedDropdown");totleTimer = Config<Text>.GetComponent(transform, "TotleTimer");culTimer = Config<Text>.GetComponent(transform, "CulTimer");playbtn = Config<Button>.GetComponent(transform, "PlayeBtn");PlaySP= Resources.Load<Sprite>("UITexture/播放");PuaseSP = Resources.Load<Sprite>("UITexture/暂停");video = Config<VideoPlayer>.GetComponent(transform.parent, "VideoPlayer");speedValue.onValueChanged.AddListener(DropdownOnClick);}private void DropdownOnClick(int arg0){var value =float.Parse( speedValue.options[arg0].text.Replace("倍速 x ", ""));video.playbackSpeed = value;}// Start is called before the first frame updatevoid Start(){ playbtn.GetComponent<Image>().sprite = PuaseSP;//视频播放结束事件video.loopPointReached += EndWithVideoPlay;//播放按钮监听playbtn.onClick.AddListener(PlayBtnOnClick);//添加Slider拖拽事件Utils.AddTriggersListener(slider.gameObject, EventTriggerType.Drag, OnDrag);}private void OnDrag(BaseEventData arg0){ //踩坑记: 强制转换  long 的时候先将算法算出来之后得到float类型,然后再将结果强转,直接算法强转结果一直为0;float tatol = slider.value * video.frameCount;video.frame = (long)tatol;}/// <summary>/// 清除上一帧渲染/// </summary>private void RemoveTargetframe(){video.targetTexture.Release();video.targetTexture.MarkRestoreExpected(); }/// <summary>/// 显示当前视频的时间/// </summary>private void ShowVideoTime() { try{if (video != null && video.isPlaying){//视频帧率  每秒多少帧;float frameRate = video.frameRate;int clipHour = (int)((float)video.frameCount / frameRate / (float)3600);int clipMinute = (int)((float)video.frameCount / frameRate - (float)clipHour * (float)3600) / 60;int clipSecond = (int)((float)video.frameCount / frameRate - (float)clipHour * (float)3600 - (float)clipMinute * (float)60);// 当前的视频播放时间int currentHour = (int)video.time / 3600;int currentMinute = (int)(video.time - currentHour * 3600) / 60;int currentSecond = (int)(video.time - currentHour * 3600 - currentMinute * 60);string culTime = string.Format("{0:D2}:{1:D2}:{2:D2}", currentHour, currentMinute, currentSecond);string totalTime = string.Format("{0:D2}:{1:D2}:{2:D2}", clipHour, clipMinute, clipSecond);culTimer.text = culTime;totleTimer.text = totalTime;slider.value = (float)video.frame / (float)video.frameCount;}}catch (Exception e){print(e.Message);}}private void PlayBtnOnClick(){isPause = isPause ? false : true;playbtn.GetComponent<Image>().sprite = isPause ? PlaySP : PuaseSP;if (isPause)video.Pause();elsevideo.Play();}private void EndWithVideoPlay(VideoPlayer source){print("视频播放结束");}// Update is called once per framevoid Update(){ShowVideoTime();}}

虽然该有的功能都有,但还是建议大家使用AVPRO插件,个人觉得它比较友好,支持webgl,官方的api我使用在webgl的时候发现老是黑屏,播放不了的情况。AVPRO解决了我的问题。
最后看效果吧:

VideoPlayer播放组件详解-Unity使用官方组件播放视频相关推荐

  1. vue组件详解(一)——组件与复用

    一.什么是组件 组件 (Component) 是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码. 二.组件用法 组件需要注册后才可以使用,注册有全局注册和局部注册两种 ...

  2. Android应用开发—Intent组件详解

    转载自:Android中Intent组件详解 Intent是不同组件之间相互通讯的纽带,封装了不同组件之间通讯的条件. Intent本身是定义为一个类别(Class),一个Intent对象表达一个目的 ...

  3. Unity 之 UGUI Layout自动布局组件详解

    Unity 之 UGUI Layout自动布局组件详解 1,布局元素 (Layout Element) 2,水平布局组 (Horizontal Layout Group) 3,垂直布局组 (Verti ...

  4. Unity 之 UGUI Dropdown下拉选单组件详解

    Unity 之 UGUI Dropdown下拉选单组件详解 1,属性面板 1), Dropdown的组成 2,代码操作 3,使用实例 1), 控制菜单展开方向 4,相关扩展 1), Lua中动态添加O ...

  5. Unity零基础到进阶 ☀️| 音频源Audio Source组件 详解

    [Unity3D组件使用指南]AudioSource组件 详解 一.组件介绍 二.组件属性面板 三.代码操作组件 四.组件常用方法示例 五.组件相关扩展 1.在Unity中听不到声音的问题 总结

  6. Unity 之 UGUI RectTransform矩形变换组件详解

    Unity 之 UGUI RectTransform矩形变换组件详解 1,属性面板 2,详细信息 3,代码操作 4,使用实例 4.1 传说中的自适应 4.2 锚点的另一种使用方式: 4.3 蓝图和原始 ...

  7. 详解Unity中的粒子系统Particle System (二)

    前言 上一篇我们简要讲述了粒子系统是什么,如何添加,以及基本模块的介绍,以及对于曲线和颜色编辑器的讲解.从本篇开始,我们将按照模块结构讲解下去,本篇主要讲粒子系统的主模块,该模块主要是控制粒子的初始状 ...

  8. 详解Unity中的粒子系统Particle System (九)

    前言 今天讲Texture Sheet Animation模块,先前我们已经讲了很多很多模块,通过上述模块可以实现很酷的效果,但是缺了一点真实感.比如说爆炸特效,仅指望单独的粒子来模拟真实的爆炸效果是 ...

  9. 详解Unity中的粒子系统Particle System (一)

    前言 游戏中很多炫酷效果的背后都离不开粒子系统,比如击中.爆炸.火焰.崩塌.喷射.烟雾等等.Unity也我们提供了强大的粒子系统,模块化的设计,上百个参数供我们调节使用,足以创造出非常震撼的效果了,本 ...

  10. 详解Unity中的粒子系统Particle System (七)

    前言 本篇来讲一讲Collision和Triggers模块,这两个模块主要用于粒子系统与物理世界的交互,一个是碰撞器,另一个是触发器.有了这两个模块我们又可以做出更炫酷的粒子效果啦! 目录 前言 本系 ...

最新文章

  1. Python爬虫9大入门学习知识点
  2. python项目主界面_python项目案例
  3. Openstack虚机实例状态错误手工恢复vm_state:error
  4. 纯文本文件的字符编码未声明_浅谈几种常见的字符编码
  5. 浅析DDD(领域驱动设计)
  6. k8s强制删除pod
  7. vite配置 vite.config.js
  8. C++_类和对象_封装_属性和行为做为整体_封装案例---C++语言工作笔记036
  9. 具有动态效果的响应式设计
  10. 安全地更改grub2屏幕分辨率
  11. C++控制台输出中文时乱码的解决方案
  12. 网络空间安全现状与国家战略
  13. Java程序编写 • 【第4章 程序:随机本周菜品;简易计算器】
  14. linux权限 rwxr xr x,小白求助:权限rwxr-xr-x是啥意思?
  15. android 画圆形图 获取圆形bitmap
  16. Nvme硬盘完美安装官方原版win10教程(含激活)
  17. UVA(WA) 10815 安迪的第一个字典
  18. python-二维码的生成与识别
  19. 有个疑问--RTOS系统中,低优先级任务什么时候得到cpu去运行
  20. 全方位保护您在 Amazon S3 的数据资产-访问控制详解

热门文章

  1. Gephi教程实战:从入门到精通——3
  2. 张宇1000题高等数学 第十三章 多元函数微分学
  3. java编程手册_Java编程手册
  4. Educoder:JavaScript学习手册十一:JSON
  5. Matlab深度学习上手初探
  6. pycharm 汉化包
  7. stm32呼吸灯c语言程序,基于stm32的PWM输出呼吸灯(包括stm32呼吸灯代码)
  8. 涵盖农业、可再生能源、酒店、金融服务、创意服务、科技、林业和建筑业的20家新公司加入《气候宣言》
  9. Mac系统可用的甘特图软件分享
  10. log4j MDC用户操作日志追踪配置