Unity基础 视频组件VideoPlayer,视频的播放与控制

在Unity中,视频播放功能具有广泛的应用,以下是一些视频播放在Unity中的常见用途:

      游戏引入和过场动画:使用视频播放可以在游戏开始或过场动画中添加引人注目的视频,为游戏制造氛围和引起玩家的兴趣。这种方式可以通过播放游戏故事、游戏背景介绍或重要情节的视频来增强游戏体验。

       游戏菜单和用户界面:通过在游戏菜单和用户界面中嵌入视频,可以提供更具吸引力和互动性的界面。例如,在游戏菜单中播放游戏预告片、特色片段或游戏玩法示例视频,以向玩家展示游戏的特点和玩法。

       教育和培训应用:视频播放在教育和培训应用中非常有用。通过在虚拟教室、培训模块或教育游戏中播放教学视频,可以提供生动直观的学习体验。视频可以用于展示实验操作、演示概念、解释复杂的过程或提供示范。

      交互式虚拟现实(VR)和增强现实(AR)体验:在VR和AR应用程序中,视频播放可以用于增强虚拟世界的真实感和交互性。例如,在虚拟旅游应用中,可以通过播放真实场景的视频来模拟旅游体验。在AR应用中,可以通过播放与现实环境相匹配的视频来实现虚拟内容的融合。

      用户反馈和游戏剧情推进:通过在游戏中播放特定的视频片段,可以提供有关游戏进展或任务完成的反馈。这可以包括奖励视频、任务完成动画或剧情推进的关键片段。这样,玩家可以获得即时的视觉和听觉反馈,增加游戏的沉浸感。

     总而言之,视频播放在Unity中扮演了许多重要的角色,从增强游戏体验到教育培训应用,以及为用户界面和交互式虚拟现实提供更多可能性。通过利用Unity的VideoPlayer组件,您可以轻松地在项目中实现视频播放功能,为用户带来更加丰富和多样化的体验。 

   首先我们先了解一下视频播放的组件VideoPlayer 

:视频播放源,有视频剪辑和URL两个选项,视频剪辑可以直接选择视频片段,URL需要放入视频链接

唤醒时播放:当程序运行的时候是否直接播放,勾选后视频默认是播放的

等待第一帧:是否预先缓存一帧,默认勾选就行,如果不勾选在播放的时候没缓存会出现无视频等待情况

循环:视频播放完毕后重新播放

回放速度:视频播放速度

渲染模式:视频播放时候的渲染模式,默认使用渲染纹理(UI)和材质覆盖(场景中),使用渲染纹理需要右键新建渲染器纹理,材质覆盖需要渲染器纹理+材质球

音频输出模式:声音的输出模式,可以选择音频源(需要指定一个音频播放组件)或者直接(直接用视频的声音,默认这个就可以) 

渲染器纹理(Render Texture)也是在视频播放中不可或缺的

       渲染器纹理是一种特殊的纹理,它能够记录摄像机的渲染结果,并将其保存为图像。这种纹理可以被用于实时监视、后期特效、纹理抓取和多摄像机渲染等场景。它可以让我们实时查看摄像机拍摄到的画面,应用各种特效效果,捕获纹理并将其应用到其他物体上,实现动态纹理效果,以及支持多摄像机同时渲染不同场景。渲染器纹理为我们提供了更多的创造性和灵活性,增强了游戏和应用程序的视觉效果。

      当我们想要在游戏或应用中播放视频时,通常会使用VideoPlayer组件来加载和控制视频文件。然而,直接将视频渲染到屏幕上可能无法满足我们的需求,因为我们可能希望在游戏场景中的特定位置播放视频,或者将视频内容应用到游戏对象的表面上。

      这就是渲染器纹理发挥作用的地方。我们可以创建一个渲染器纹理,并将VideoPlayer组件的输出设置为该纹理,这样视频播放的内容就会被渲染到该纹理上。接着,我们可以将该纹理应用到游戏对象的材质上,或者在UI元素中显示该纹理,从而实现视频的播放效果。 

在场景中播放视频

     假如我们需要将视频播放在场景中播放,我们可以新建一个平面用来作为显示视频的载体,然后增加视频播放组件

    之后我们右键-创建一个渲染器纹理,创建后直接将这个渲染器纹理拖到平面上 

        这时候会自动生成一个材质球并且赋值给这个平面

然后我们找到视频播放组件,将需要播放的视频赋值,可以看到视频播放组件的Renderer就是我们新建的Plane,然后点击运行就可以看到视频播放了(此时的模式是材质覆盖),当然我们也可以调整这个平面的缩放在调整正在播放视频的尺寸 

在UI中播放视频

首先在层级面板右键-UI-原始图像(RawImage)

创建后我们可以把刚才新建的渲染器纹理直接拖动到RawImage组件下面的纹理中

然后我们添加视频播放组件(VideoPlayer),将视频指定,然后将渲染模式设置为渲染器纹理,将渲染器纹理赋值,点击运行就可以播放了 

下面我们看一下如何用代码对视频组件进行控制,先看一下常用的属性和方法 

//playOnAwake       唤醒时播放,程序运行时是否默认就播放视频
//isLooping         循环播放,播放完成后是否重复播放
//playbackSpeed     播放速度,默认从0-10
//waitForFirstFrame 等待第一帧
//isPlaying         当前是否在播放
//isPaused          当前是否暂停
//Stop()            停止播放,每次使用停止播放再次开始播放时候都会重新播放视频
//Pause()           暂停播放,只是咱停播放,再次开始播放时会从暂停的地方开始播放
//Play()            开始播放,使用停止或者暂停播放可以通过Play重新开始播放 

 以下代码是如何对视频播放组件的一些参数进行控制,以及控制视频的播放和停止

using UnityEngine;
using UnityEngine.Video;//需要引入视频组件的命名空间
public class VideoPlayerTest : MonoBehaviour
{

    //视频播放组件
    private VideoPlayer _videoplayer;

    void Awake()
    {
        //获取自身的视频播放组件
        _videoplayer = GetComponent<VideoPlayer>();
    }

    void Start()
    {
        //设置运行时播放
        _videoplayer.playOnAwake = true;
        //设置是否循环播放
        _videoplayer.isLooping = true;
        //设置视频倍速
        _videoplayer.playbackSpeed = 1.5f;
        //设置预先缓存一帧
        _videoplayer.waitForFirstFrame = true;
        //如果音频输出模式指定了音频组件可以通过代码控制
        //控制视频静音
        _videoplayer.GetTargetAudioSource(0).mute = false;
        //控制视频音量大小
        _videoplayer.GetTargetAudioSource(0).volume = 0.5f;
    }
    void Update()
    {
        //按下键盘P键来判断当前视频是否在播放,如果是播放状态就停止,如果是停止状态就开始播放
        if (Input.GetKeyDown(KeyCode.P))
        {
            if (_videoplayer.isPlaying)
            {
                _videoplayer.Stop();
            }
            else
            {
                _videoplayer.Play();
            }

        }
        //按下键盘A键来判断当前视频是否在暂停,如果是播暂停就播放,如果是播放就暂停
        if (Input.GetKeyDown(KeyCode.A))
        {
            if (_videoplayer.isPaused)
            {
                _videoplayer.Play();
            }
            else
            {
                _videoplayer.Pause();
            }

        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/29936.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CSS基础学习--11 padding(填充)

一、定义 CSS padding&#xff08;填充&#xff09;是一个简写属性&#xff0c;定义元素边框与元素内容之间的空间&#xff0c;即上下左右的内边距。 当元素的 padding&#xff08;填充&#xff09;内边距被清除时&#xff0c;所释放的区域将会受到元素背景颜色的填充。 单独使…

Linux运维监控学习笔记1

1. 监控系统的概念&#xff1a; 监控系统&#xff0c;将所有需要监控的服务器及其各种各种需要的状态数据都实时地收集&#xff0c;并图形化地展示&#xff0c;并可以进行报警&#xff0c;让机器主动及时地与人沟通。 2. 为什么要监控&#xff1f; 答&#xff1a;实时地收集数…

kubernetes(k8s)理论篇

注意&#xff1a;kubeadm与docker是有版本要求的。 如果版本不兼容&#xff0c;初始化 kubeadm是会出现以下问题。 学习k8s掌握知识 基础概念 什么是 Pod 控制器类型 K8S 网络通讯模式 Kubernetes 构建 K8S 集群 资源清单 资源 掌握资源清单的语法 编写 Pod 掌握 Pod 的…

JVM知识点整理

JVM 回收哪个区域&#xff1f;关联面试题&#xff1a;fullgc会回收方法区&#xff08;元空间&#xff09;吗? 怎么判断对象可以被回收了关联面试题&#xff1a;哪些对象可以作为 GC Root &#xff08;两栈两方法&#xff09; JVM GC什么时候执行&#xff1f;分代回收机制思考&…

docker容器启动的问题 - docker容器和虚拟机的比较 - docker的底层隔离机制

目录 一、docker容器启动的问题&#xff1f; 二、什么是docker仓库&#xff1f; 三、虚拟机和docker容器的区别&#xff1a; docker的优势&#xff1a; docker的缺点&#xff1a; 对比&#xff1a; 四、docker的底层隔离机制 参考文献&#xff1a;LXC linux容器简介——…

图像 检测 - CenterNet: Objects as Points (arXiv 2019)

CenterNet: Objects as Points - 目标作为点&#xff08;arXiv 2019&#xff09; 摘要1. 引言2. 相关工作3. 准备工作4. 目标作为点4.1 3D 检测4.2 人体姿态估计 5. 实施细节6. 实验6.1 目标检测6.1.1 附加实验 6.2 3D 检测6.3 姿态估计 7. 结论References附录A&#xff1a;模型…

【C数据结构】动态顺序表_SeqList

目录 【1】数据结构概述 【1.1】什么是数据结构&#xff1f; 【1.2】数据结构分类 【1.3】数据结构术语 【2】数据结构特点 【2】动态顺序表 【2.1】动态顺序表定义数据结构和接口 【2.1】动态顺序表创建初始化 【2.2】动态顺序表初始化 【2.3】动态顺序表内存释放 【…

mac电脑储存内存越来越小如何清理释放空间?

如果你是一位Mac系统的用户&#xff0c;可能会发现你的电脑储存空间越来越小。虽然Mac系统设计得非常优秀&#xff0c;但是系统数据和垃圾文件也会占据大量的储存空间。在这篇文章中&#xff0c;我们将探讨mac系统数据怎么这么大&#xff0c;以及mac清理系统数据怎么清理。 一…

万字详解常用设计模式

本文是博主在工作中对常用设计模式的使用经验总结归纳而来分享给大家。 设计模式一共有23种&#xff0c;本文讲解涉及如下&#xff1a; 责任链模式 模板方法模式 发布订阅模式 策略模式 三大分类 业界一般将设计模式分为三大类&#xff1a; 创建型模式&#xff1a;对类的实…

5、产品经理的工作职责OR主要工作技能和工具

1、产品经理的工作职责 我们通过一个案例来了解产品经理的工作职责。 老板让你给他点餐&#xff0c;你应该怎么做&#xff1f;你需要考虑哪一些方面的问题&#xff1f; 例如&#xff1a;你预算多少&#xff0c;预算是十块钱还是100块还是1000块。有没有忌口&#xff0c;口味…

Kafka详解(一)

第1章 Kafka概述 1.1 定义 1.2 消息队列 目前企业中比较常见的消息队列产品主要有Kafka、ActiveMQ、RabbitMQ、RocketMQ等。Message Queue ② 在大数据场景主要采用Kafka作为消息队列 ② 在JavaEE开发中主要采用ActiveMQ、RabbitMQ、RocketMQ Kafka存储数据&#xff0c;且保证…

「网络编程」第一讲:初识网络_网络基础1

「前言」文章是关于网络编程方面的&#xff0c;今天内容大致是网络基础&#xff0c;讲解下面开始&#xff01; 「归属专栏」网络编程 「笔者」枫叶先生(fy) 「座右铭」前行路上修真我 「枫叶先生有点文青病」 「每篇一句」 青山不改&#xff0c;绿水长流 ——白居易 目录 一、…

新手快速搭建springboot项目

一、创建项目 1.1、创建项目 1.2、配置编码 1.3、取消无用提示 1.4、取消无用参数提示 二、添加POM父依赖 <!-- 两种方式添加父依赖或者import方式 --> <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-p…

微信小程序触底加载scroll-view

微信小程序触底加载 scroll-view 了解什么是触底加载&#xff1f; 需求&#xff1a;有个固定高度的容器&#xff0c;实现容器里面的内容触底加载 1、内容盒子的高度 2、盒子里内容的总高度 3、滚动条的scrollTop 触底加载的原理就是 当里面的容器触底的时候进行分页&#xff0…

Ansible-playbook-roles安装lnmp

使用roles安装lnmp 1、准备四台主机 192.168.142.10 192.168.142.20 192.168.142.30 192.168.142.40 2、10作为ansible管理端 首先ssh连接剩下三台主机 3、vim/etc/ansible/hosts 添加[nginxservers]配置nginx ip,[phpservers]php ip,[mysqlservers]mysql ip 4、cd /etc/ansibl…

0基础学习VR全景平台篇第42篇:编辑器底部菜单-分组管理

大家好&#xff0c;欢迎观看蛙色VR官方系列——后台使用课程&#xff01; 本期为大家带来蛙色VR平台&#xff0c;底部菜单—分组管理功能操作。 功能位置示意 一、本功能将用在哪里&#xff1f; 分组管理&#xff0c;指观看者可点击不同分组&#xff0c;查看不同类型全景内容…

【ROS】ROS+Gazebo强化学习:训练

1、安装ROS1 【ROS】Ubuntu20.04安装ROS1 2、安装Anaconda 【AI】PyTorch入门&#xff08;一&#xff09;&#xff1a;通过Anaconda安装PyTorch 【PyThon】Anaconda常用命令 3、源码下载 使用论文 Goal-Driven Autonomous Exploration Through Deep Reinforcement Learnin…

Springboot整合Camunda工作流引擎实现审批流程实例

环境&#xff1a;Spingboot2.6.14 camunda-spring-boot-starter7.18.0 环境配置 依赖配置 <camunda.version>7.18.0</camunda.version> <dependency><groupId>org.camunda.bpm.springboot</groupId><artifactId>camunda-bpm-spring-boo…

Redis-缓存

新增或者更新数据时,创建以后顺便存到redis中去【维护缓存】 获取的时候先从redis缓存中拿数据 如果拿数据的时候为空,则到数据库中拿数据,后再存到redis缓存中去 大量的商品【包括冷门商品】都进行上面的缓存,那么就很耗内存 针对每个数据进行缓存的时候 维护一个过期时间…

计算服务资源调度管理

文章目录 前言总体架构“ULT”和“KLT”抽象“内核”“容器”“虚容器” 内存抽象虚拟存储&#xff08;容器调用&#xff09; 多机器调度 前言 今天复习了一下操作系统&#xff0c;系统过了一下&#xff0c;感觉还有点时间&#xff0c;那么顺便来讨论一下&#xff0c;关于我的…