Unity

您所在的位置:网站首页 成安一中视频事件 Unity

Unity

2024-07-07 23:18| 来源: 网络整理| 查看: 265

VideoPlayer 介绍:

Unity正式发布了5.6版本后,作为5.x版本的最后一版还是有不少给力的更新的。其中新加入了一个Video Player控件,用以取代之前的MovieTexture。

Video Player提供了多种视频渲染的方式,包括Camera Far Plane,Camera Near Plane,Render Texture,Material Override,Api Only。

Camera Far Plane:基于摄像机的渲染,渲染在摄像机的远平面上,需要设置用于渲染的摄像机,同时可以修改alpha通道的值做透明效果,可用于背景播放器。

Camera Near Plane:基于摄像机的渲染,渲染在摄像机的近平面上,需要设置用于渲染的摄像机,同时可以修改alpha通道的值做透明效果,可用作前景播放器。

Render Texture:将视频画面保存在Render Texture上,以供物体或者RawImage使用,可以用来做基于UGUI的播放器。

Material Override:将视频画面复制给所选Render的Material。需要选择具有Render组件的物体,可以选择赋值的材质属性。可制作360全景视频VR视频。

Api Only:不要在任何地方绘制视频内容,但仍可通过API中的VideoPlayer的纹理属性使其可用。

本地视频播放:

直接将视频拖到VideoClip上

网络视频播放:

将网络视频的链接写到URL上面

这个时候我们会发现,播放的时候没有声音。 我们只要添加一个Audio Source组件,将他赋给VideoPlayer里面的Audio Source就有声音了,如下图所示。

VideoPlayer脚本控制:

脚本控制(需引用UnityEngine.Video):VideoPlayer的脚本控制与AudioSource相似,有常规的Play,Pause,Stop方法,也有用于进度控制的time,isPlaying,isLooping,frame,frameCount等属性。VideoPlayer可以使用一系列事件来监听播放的各个动作: errorReceived: 错误监听到时被执行。frameDropped :有丢帧发生时被执行。frameReady :新的一帧准备好时被执行。loopPointReached :播放结束或播放到循环的点时被执行。prepareCompleted :视频准备完成时被执行。seekCompleted :查询帧操作完成时被执行。started:在Play方法调用之后立刻调用。

下面是部分代码实现,具体工程可以点击这里下载,Unity——VideoPlayer完整运行实例:

工程截图:

VideoPlayer初始化:

private void Init(string url) { show = true; isVideo = true; mute = false; time_Count = 0; time_Current = 0; sliderVideo.value = 0; //设置RenderTexture或RawImage上渲染VideoPlayer vPlayer.renderMode = VideoRenderMode.RenderTexture; //设置为URL模式 vPlayer.source = VideoSource.Url; //设置播放路径 vPlayer.url = url; //在视频中嵌入的音频类型 vPlayer.audioOutputMode = VideoAudioOutputMode.AudioSource; //当VideoPlayer全部设置好的时候调用,帧立即可用 vPlayer.prepareCompleted += OnPrepareFinished; //准备播放所需要的资源,预加载部分或者全部要播放的视频 vPlayer.Prepare(); }

VideoPlayer的prepareCompleted执行回调,按照Unity官方文档,直接调用Play()方法,也会先调用Prepare()方法,等待准备完毕,才会播放:

void OnPrepareFinished(VideoPlayer player) { //把图像赋给RawImage image.texture = vPlayer.texture; //帧数/帧速率=总时长 如果是本地直接赋值的视频,我们可以通过VideoClip.length获取总时长 sliderVideo.maxValue = vPlayer.frameCount / vPlayer.frameRate; time = sliderVideo.maxValue; hour = (int)time / 60; mint = (int)time % 60; text_Count.text = string.Format("/ {0:D2}:{1:D2}", hour, mint); sliderVideo.onValueChanged.AddListener(delegate { ChangeVideo(sliderVideo.value); }); player.Play(); }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3