当前位置:   article > 正文

Unity | Video Player的简单使用方法和原理_unity videoplayer

unity videoplayer

一、 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;

在外面把这个物体拖进来

 然后就可以简单使用了,下面是常用方法

  1. videoPlayer.Play(); //开始
  2. videoPlayer.Stop(); //停止
  3. videoPlayer.Pause(); //暂停
  4. videoPlayer.Prepare(); // 播放引擎准备(提高开始播放时的速度)
  5. videoPlayer.targetTexture.Release(); //重播时,不出现之前结束时的画面
  6. videoPlayer.started += "方法名" //每次播放后立刻启动方法
  7. videoPlayer.loopPointReached += "方法名" //每次到结尾,都会自己启动这个方法
  8. videoPlayer.time = 5; //视频的时间调到第五秒
  9. videoPlayer.frame = 1; //视频调到第一帧
  10. //常用案例中细讲
  11. videoPlayer.sendFrameReadyEvents = true; //启用videoPlayer.frameReady方法
  12. videoPlayer.frameReady += "方法名" //准备好新的一帧后启动这个方法

 上面有方法名的示例代码

  1. videoPlayer.loopPointReached += FalseGameObject;
  2. void FalseGameObject(VideoPlayer videoPlayer) {
  3. gameObject.SetActive(false);
  4. }

方法的括号里必须要带 VideoPlayer哦,后面那个小写的是名字,可以自己起不要紧。

三、常用案例

(一)打开视频后,显示第一帧图片

VideoPlayer中可以选择自动打开并播放视频,和不打开视频。

但是有时候我们有需求,我希望第一帧出现在界面上,用来做封面或者其他。

图例:

你希望再软件里实现这个状态,展示视频图,但是又不播放。

基本逻辑:

1.我们让它自动打开视频(别忘了自己开这一步)

2.当准备好第一帧的时候,它会自动播放第一帧

3.趁他没反应过来,暂停它

  1. VideoPlayer vp;
  2. void Start()
  3. {
  4. //我一般把这个代码直接挂在需要需要使用的VideoPlayer身上,这样可以直接找到组件
  5. vp = GetComponent<VideoPlayer>();
  6. //frameReady这个方法是需要打开才能用的
  7. //这个下面这句话就是我把这个方法启用
  8. vp.sendFrameReadyEvents = true;
  9. //当准备好新的一帧后,执行下面方法
  10. vp.frameReady += PauseVideoUnitOnFirstFrame;
  11. }
  12. public void PauseVideoUnitOnFirstFrame(VideoPlayer player, long frameIdx)
  13. {
  14. //暂停播放
  15. player.Pause();
  16. //关掉这个方法,要不然它准备好第二帧又执行,没完没了了
  17. player.sendFrameReadyEvents = false;
  18. //同时也去掉这个方法
  19. player.frameReady -= PauseVideoUnitOnFirstFrame;
  20. }

四、相关内容

Unity | 如何使用webm透明视频_菌菌巧乐兹的博客-CSDN博客

 五、关于性能优化

1.播放方式优化

正常拿电脑播放视频有两种方式:

假如我有10个视频

1.我开机以后,把10个视频都打开,也不关,就一直都开着,用哪个就播放哪个。

优点:点击播放不会缓存(不会卡),因为都是提前加载好的

缺点:你一两个视频,哪怕三四个视频都还好,你要是十几二十几个视频一起开,电脑就卡死了,所以非常浪费性能。

2.我把10个视频都准备好,但我不打开,我需要哪个再打开哪个。

优点:不浪费性能,哪怕你准备100个视频

缺点:你每次打开了才缓存,所以可能会卡

推荐用第二个。

2.代码注意事项

视频播放完,或者你用了暂停的方法,视频本质上都还是开着的,只是不播放了而已。

所以记得视频播放完以后用stop()方法,把视频关掉,降低内存占用!!!!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/92362
推荐阅读
相关标签
  

闽ICP备14008679号