赞
踩
讲解逻辑为Unity | 基础逻辑_菌菌巧乐兹的博客-CSDN博客
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控制
所以我们先建一个脚本,写一行代码
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博客
正常拿电脑播放视频有两种方式:
假如我有10个视频
1.我开机以后,把10个视频都打开,也不关,就一直都开着,用哪个就播放哪个。
优点:点击播放不会缓存(不会卡),因为都是提前加载好的
缺点:你一两个视频,哪怕三四个视频都还好,你要是十几二十几个视频一起开,电脑就卡死了,所以非常浪费性能。
2.我把10个视频都准备好,但我不打开,我需要哪个再打开哪个。
优点:不浪费性能,哪怕你准备100个视频
缺点:你每次打开了才缓存,所以可能会卡
推荐用第二个。
视频播放完,或者你用了暂停的方法,视频本质上都还是开着的,只是不播放了而已。
所以记得视频播放完以后用stop()方法,把视频关掉,降低内存占用!!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。