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

2024-03-08 14:40

本文主要是介绍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()方法,把视频关掉,降低内存占用!!!!

这篇关于Unity | Video Player的简单使用方法和原理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/787419

相关文章

PHP轻松处理千万行数据的方法详解

《PHP轻松处理千万行数据的方法详解》说到处理大数据集,PHP通常不是第一个想到的语言,但如果你曾经需要处理数百万行数据而不让服务器崩溃或内存耗尽,你就会知道PHP用对了工具有多强大,下面小编就... 目录问题的本质php 中的数据流处理:为什么必不可少生成器:内存高效的迭代方式流量控制:避免系统过载一次性

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

springboot中使用okhttp3的小结

《springboot中使用okhttp3的小结》OkHttp3是一个JavaHTTP客户端,可以处理各种请求类型,比如GET、POST、PUT等,并且支持高效的HTTP连接池、请求和响应缓存、以及异... 在 Spring Boot 项目中使用 OkHttp3 进行 HTTP 请求是一个高效且流行的方式。

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

JavaScript中的高级调试方法全攻略指南

《JavaScript中的高级调试方法全攻略指南》什么是高级JavaScript调试技巧,它比console.log有何优势,如何使用断点调试定位问题,通过本文,我们将深入解答这些问题,带您从理论到实... 目录观点与案例结合观点1观点2观点3观点4观点5高级调试技巧详解实战案例断点调试:定位变量错误性能分

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Python中 try / except / else / finally 异常处理方法详解

《Python中try/except/else/finally异常处理方法详解》:本文主要介绍Python中try/except/else/finally异常处理方法的相关资料,涵... 目录1. 基本结构2. 各部分的作用tryexceptelsefinally3. 执行流程总结4. 常见用法(1)多个e

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java