一、 Video Player的使用方法
讲解逻辑为Unity | 基础逻辑_菌菌巧乐兹的博客-CSDN博客
(一)把素材仓库里的视频放进Game界面
1.我们需要在素材仓库中放一个视频(其他文件夹不用管,我只是懒得删了)
2.在Unity里建一个能接收视频的地方VideoPlayer
备注:视频和图片是不一样的,图片到这一步组合一下就能用,但是视频不行。因为Unity里不支持直接播放视频,它只能播放动态的Texture。
3.我们来看一下VideoPlayer身上带的组件
这里因为unity自己也知道,自己没办法直接播放视频,所以它这里让你可以填两个东西,上面是你想播放的视频,下面让你填一个空的texture,之后,它会自己把视频印到Texture上,所以这个组件并不是真的用来播放视频的,而是用来转换的。
4.所以我们需要建一个新的Texture来接收这个视频(在这个界面右键→ Creat→可以找到RenderTexture)
把这个拖到刚才VideoPlayer上应该在的位置
此时此刻,我们就成功把视频印到这个新建的Texture身上了
5.我们需要建一个播放Texture的东西
unity播放Texture的物体叫RawImage
把你的Texture拖进去
这样就可以播放视频了
(二)大小控制
因为这个视频是印到Texture身上,所以我们想改视频的大小,就必须改Texture的大小
因为这个texture是用RawImage播放的,所以我们也需要改rawImage的大小(这步略)
(三)VideoPlayer组件常用部分
二 、Video Player的常用方法
控制视频,我们还是通过VideoPlayer控制
所以我们先建一个脚本,写一行代码
public VideoPlayer videoPlayer;
在外面把这个物体拖进来
然后就可以简单使用了,下面是常用方法
videoPlayer.Play(); //开始
videoPlayer.Stop(); //停止
videoPlayer.Pause(); //暂停
videoPlayer.Prepare(); // 播放引擎准备(提高开始播放时的速度)
videoPlayer.targetTexture.Release(); //重播时,不出现之前结束时的画面
videoPlayer.started += "方法名" //每次播放后立刻启动方法
videoPlayer.loopPointReached += "方法名" //每次到结尾,都会自己启动这个方法
videoPlayer.time = 5; //视频的时间调到第五秒
videoPlayer.frame = 1; //视频调到第一帧
//常用案例中细讲
videoPlayer.sendFrameReadyEvents = true; //启用videoPlayer.frameReady方法
videoPlayer.frameReady += "方法名" //准备好新的一帧后启动这个方法
上面有方法名的示例代码:
videoPlayer.loopPointReached += FalseGameObject;
void FalseGameObject(VideoPlayer videoPlayer) {
gameObject.SetActive(false);
}
方法的括号里必须要带 VideoPlayer哦,后面那个小写的是名字,可以自己起不要紧。
三、常用案例
(一)打开视频后,显示第一帧图片
VideoPlayer中可以选择自动打开并播放视频,和不打开视频。
但是有时候我们有需求,我希望第一帧出现在界面上,用来做封面或者其他。
图例:
你希望再软件里实现这个状态,展示视频图,但是又不播放。
基本逻辑:
1.我们让它自动打开视频(别忘了自己开这一步)
2.当准备好第一帧的时候,它会自动播放第一帧
3.趁他没反应过来,暂停它
VideoPlayer vp;
void Start()
{
//我一般把这个代码直接挂在需要需要使用的VideoPlayer身上,这样可以直接找到组件
vp = GetComponent<VideoPlayer>();
//frameReady这个方法是需要打开才能用的
//这个下面这句话就是我把这个方法启用
vp.sendFrameReadyEvents = true;
//当准备好新的一帧后,执行下面方法
vp.frameReady += PauseVideoUnitOnFirstFrame;
}
public void PauseVideoUnitOnFirstFrame(VideoPlayer player, long frameIdx)
{
//暂停播放
player.Pause();
//关掉这个方法,要不然它准备好第二帧又执行,没完没了了
player.sendFrameReadyEvents = false;
//同时也去掉这个方法
player.frameReady -= PauseVideoUnitOnFirstFrame;
}
四、相关内容
Unity | 如何使用webm透明视频_菌菌巧乐兹的博客-CSDN博客
五、关于性能优化
1.播放方式优化
正常拿电脑播放视频有两种方式:
假如我有10个视频
1.我开机以后,把10个视频都打开,也不关,就一直都开着,用哪个就播放哪个。
优点:点击播放不会缓存(不会卡),因为都是提前加载好的
缺点:你一两个视频,哪怕三四个视频都还好,你要是十几二十几个视频一起开,电脑就卡死了,所以非常浪费性能。
2.我把10个视频都准备好,但我不打开,我需要哪个再打开哪个。
优点:不浪费性能,哪怕你准备100个视频
缺点:你每次打开了才缓存,所以可能会卡
推荐用第二个。
2.代码注意事项
视频播放完,或者你用了暂停的方法,视频本质上都还是开着的,只是不播放了而已。文章来源:https://www.toymoban.com/news/detail-452501.html
所以记得视频播放完以后用stop()方法,把视频关掉,降低内存占用!!!!文章来源地址https://www.toymoban.com/news/detail-452501.html
到了这里,关于Unity | Video Player的简单使用方法和原理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!