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

相关文章

Spring Boot整合Redis注解实现增删改查功能(Redis注解使用)

《SpringBoot整合Redis注解实现增删改查功能(Redis注解使用)》文章介绍了如何使用SpringBoot整合Redis注解实现增删改查功能,包括配置、实体类、Repository、Se... 目录配置Redis连接定义实体类创建Repository接口增删改查操作示例插入数据查询数据删除数据更

使用python生成固定格式序号的方法详解

《使用python生成固定格式序号的方法详解》这篇文章主要为大家详细介绍了如何使用python生成固定格式序号,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下... 目录生成结果验证完整生成代码扩展说明1. 保存到文本文件2. 转换为jsON格式3. 处理特殊序号格式(如带圈数字)4

Java使用Swing生成一个最大公约数计算器

《Java使用Swing生成一个最大公约数计算器》这篇文章主要为大家详细介绍了Java使用Swing生成一个最大公约数计算器的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下... 目录第一步:利用欧几里得算法计算最大公约数欧几里得算法的证明情形 1:b=0情形 2:b>0完成相关代码第二步:加

Java中流式并行操作parallelStream的原理和使用方法

《Java中流式并行操作parallelStream的原理和使用方法》本文详细介绍了Java中的并行流(parallelStream)的原理、正确使用方法以及在实际业务中的应用案例,并指出在使用并行流... 目录Java中流式并行操作parallelStream0. 问题的产生1. 什么是parallelS

MySQL数据库双机热备的配置方法详解

《MySQL数据库双机热备的配置方法详解》在企业级应用中,数据库的高可用性和数据的安全性是至关重要的,MySQL作为最流行的开源关系型数据库管理系统之一,提供了多种方式来实现高可用性,其中双机热备(M... 目录1. 环境准备1.1 安装mysql1.2 配置MySQL1.2.1 主服务器配置1.2.2 从

Linux join命令的使用及说明

《Linuxjoin命令的使用及说明》`join`命令用于在Linux中按字段将两个文件进行连接,类似于SQL的JOIN,它需要两个文件按用于匹配的字段排序,并且第一个文件的换行符必须是LF,`jo... 目录一. 基本语法二. 数据准备三. 指定文件的连接key四.-a输出指定文件的所有行五.-o指定输出

Java中Redisson 的原理深度解析

《Java中Redisson的原理深度解析》Redisson是一个高性能的Redis客户端,它通过将Redis数据结构映射为Java对象和分布式对象,实现了在Java应用中方便地使用Redis,本文... 目录前言一、核心设计理念二、核心架构与通信层1. 基于 Netty 的异步非阻塞通信2. 编解码器三、

Linux jq命令的使用解读

《Linuxjq命令的使用解读》jq是一个强大的命令行工具,用于处理JSON数据,它可以用来查看、过滤、修改、格式化JSON数据,通过使用各种选项和过滤器,可以实现复杂的JSON处理任务... 目录一. 简介二. 选项2.1.2.2-c2.3-r2.4-R三. 字段提取3.1 普通字段3.2 数组字段四.

Linux kill正在执行的后台任务 kill进程组使用详解

《Linuxkill正在执行的后台任务kill进程组使用详解》文章介绍了两个脚本的功能和区别,以及执行这些脚本时遇到的进程管理问题,通过查看进程树、使用`kill`命令和`lsof`命令,分析了子... 目录零. 用到的命令一. 待执行的脚本二. 执行含子进程的脚本,并kill2.1 进程查看2.2 遇到的

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node