Unity播放视频的几种方式
简介:许多游戏都是在开场CG播放后,进入主菜单的界面,例如炉石传说等。因此对unity播放视频的方式产生了兴趣,在查阅许多博客以及官方文档后,总结出以下几种方式,并以videoplayer方式制作一个简单的播放器
一、
首先是以MovieTexture方式播放视频,参考雨松MOMO的博客
这里原博客已经写的很详细了,这里不作过多阐述,仅以总结的方式描述
视频会以MovieTexture的方式导入unity
PC端
1.建立一个3d物体plane,修改plane的主纹理为导入的movietexture
2.通过UI直接绘制电影纹理movietexture
手机端
因为MovieTexture无法在手机上使用,因此在手机端上使用Handheld.PlayFullScreenMovie方式播放
备注:需要将视频放在Assets/StreamingAssets/路径下,、
二、
untiy在5.6版本推出了videoplayer控件,用以取代MovieTexture
导入的视频将默认以videoclip的格式保存,仍然保留MovieTexture格式的切换
以下是生成videoplayer控件的几种方式
1.新建一个空白的Video Player:选择菜单栏的GameObject->Video->Video Player或者在Hierarchy面板上选择Create->Video->Video Player或者右击Hierarchy面板空白处选择Video->Video Player。
2.直接将导入的VideoClip拖入场景或者Hierarchy面板,生成的VideoPlayer控件的VideoClip将会自动被赋值,如果场景中存在MainCamera,Camera也会被自动赋值为MainCamera,模式默认选择Camera Far Plane。
3.将导入的VideoClip拖动到场景中的Camera物体上,生成的VideoPlayer控件的VideoClip和MainCamera将会自动被赋值,模式默认选择Camera Far Plane。
4.将导入的VideoClip拖动到场景中的2D或者3D物体上,生成的VideoPlayer控件的VideoClip和Renderer将会自动被赋值,模式默认选择Material Override。
5.将导入的VideoClip拖动到场景中的UI物体上,生成的VideoPlayer控件的VideoClip将会自动被赋值,模式默认选择Render Texture。
视频来源
videoclip | 导入的本地视频 |
URL | 网络视频 |
以下是基本设置
Play On Awake | 脚本载入时自动播放 |
Wait For First Frame | 决定是否在第一帧加载完成后才播放,只有在Play On Awake被勾选是才有效 |
Loop | 循环 |
Playback Speed | 播放速度 |
Video Player视频渲染的方式
Camera Far Plane | 基于摄像机的渲染,渲染在摄像机的远平面上,需要设置用于渲染的摄像机,同时可以修改alpha通道的值做透明效果,可用于背景播放器 |
Camera Near Plane | 基于摄像机的渲染,渲染在摄像机的近平面上,需要设置用于渲染的摄像机,同时可以修改alpha通道的值做透明效果,可用作前景播放器 |
render Texture | 将视频画面保存在Render Texture上,以供物体或者RawImage使用,可以用来做基于UGUI的播放器 |
Material Override | 将视频画面复制给所选Render的Material。需要选择具有Render组件的物体,可以选择赋值的材质属性。可制作360全景视频和VR视频 |
API Only | 未知 |
Video Player监听事件
errorReceived | 错误监听到时被执行 |
frameDropped | 有丢帧发生时被执行 |
frameReady | 新的一帧准备好时被执行 |
loopPointReached | 播放结束或播放到循环的点时被执行 |
prepareCompleted | 视频准备完成时被执行 |
seekCompleted | 查询帧操作完成时被执行 |
started | 在Play方法调用之后立刻调用 |
视频的声音输出有两种方式
direct | 直接和视频画面一起输出 |
Audio Source | 添加一个Audio Source组件,以Audio Source的方式输出 |
看了许多博客,有关于声音输出的两个问题
1.direct方式没有声音输出
这个问题在我运行中并没有碰到,因此无法理解其原因,大多解决办法是通过Audio Source方式添加Audio Source组件播放声音,留待考究。
2.有声视频和无声视频切换会造成无声
留待考究
三、
下面通过Video Player方式制作一个简单的视频播放器
以Render Texture的方式将视频渲染到新建的movie材质上,再新建一个UI-RawImage,将movie材质赋给它,再创建几个UI-Botton用来实现开始、暂停、倍速、快进等功能
新建一个空对象用来挂载脚本,再将脚本中的函数与UI的事件进行绑定
using UnityEngine; using UnityEngine.Video; using UnityEngine.UI; public class MyVideo : MonoBehaviour { public VideoPlayer vPlayer; public GameObject rawImage; private double totaltime; //视频总时长 private float skiptime = 10; //快进or快退的时间 void Start() { vPlayer.loopPointReached += EndReached; totaltime = vPlayer.length; } //当视频播放完毕时关闭视频 void EndReached(VideoPlayer vPlayer) { rawImage.SetActive(false); } //关闭视频 public void close() { vPlayer.Stop(); rawImage.SetActive(false); } //播放or暂停 public void startandpause() { if(vPlayer.isPaused==true) { vPlayer.Play(); } else if (vPlayer.isPlaying == true) { vPlayer.Pause(); } } //倍速播放 public void playspeed(int value) { float speed=1; switch (value) { case 0: speed =1; break; case 1: speed =0.5f; break; case 2: speed =1.5f; break; case 3: speed =2.0f; break; } vPlayer.playbackSpeed = speed; } //快进 public void next() { vPlayer.time += skiptime; } //快退 public void last() { vPlayer.time -= skiptime; } }
参考:https://blog.csdn.net/qq_24896943/article/details/76268980
github地址:https://github.com/Stardust-Alter/unity-video-player
- 【Unity 3D】常用播放视频的几种方式
- Android视频播放 的几种方式
- Android 视频播放的几种方式
- android实现视频播放的几种方式
- MFC实现播放视频的几种方式
- Unity视频播放的各种实现方式汇总
- 关于iOS中音视频播放的几种方式介绍
- Unity视频播放的各种实现方式汇总
- unity跳过QuickTime播放视频的另一种方式
- [总结]Android 获取本地视频文件路径并播放的几种方式
- 几种播放视频的方式
- 几种方式加速网页视频播放速度
- Android几种播放视频的方式
- Unity视频播放的各种实现方式汇总
- Unity3D两种方式播放游戏视频
- EasyDarwin EasyClient中DirectShow采集音视频流程及几种采集方式介绍
- iOS中三种方式实现登录界面播放视频或gif效果
- Unity移动端视频播放(AVPro Video插件)
- 视频播放的三种方式