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

一、 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.代码注意事项

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

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

  • 14
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菌菌巧乐兹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值