Unity(2022.3.41LTS) - 视频

news2024/9/20 18:40:47

目录

零. 简介

一、视频支持的格式和平台

二、视频播放组件

三、视频播放控制

四、视频与游戏交互

五、性能和优化



零. 简介

在 Unity 中,视频播放是一项强大的功能,可以为游戏和应用程序增添丰富的多媒体体验。

一、视频支持的格式和平台

Unity 支持多种常见的视频格式,包括但不限于以下几种:

  1. MP4:这是一种广泛使用的视频格式,具有良好的兼容性和压缩比。在 Unity 中,MP4 格式的视频可以通过 VideoPlayer 组件进行播放。
  2. MOV:苹果公司开发的视频格式,通常用于 Mac 和 iOS 设备。Unity 也可以播放 MOV 格式的视频。
  3. WebM:一种开放的视频格式,适用于网络播放。WebM 格式的视频在 Unity 中可以通过 VideoPlayer 组件进行播放,并且可以在网页上进行嵌入。

二、视频播放组件

  1. VideoPlayer组件:

    • 功能:这是 Unity 中用于播放视频的核心组件。它可以加载和播放视频文件,控制视频的播放状态(播放、暂停、停止),设置视频的音量、循环播放等属性。
    • 属性:
      • source:指定视频的来源,可以是本地文件路径、网络 URL 或 AssetBundle 中的视频资源。
      • playOnAwake:决定是否在游戏对象被激活时自动播放视频。
      • loop:设置视频是否循环播放。
      • isLooping:获取当前视频是否处于循环播放状态。
      • volume:控制视频的音量大小,取值范围为 0(静音)到 1(最大音量)。
      • targetTexture:将视频输出到一个纹理上,可以将该纹理应用到材质上,以在游戏场景中显示视频。
    • 事件:
      • started:视频开始播放时触发。
      • paused:视频暂停时触发。
      • stopped:视频停止播放时触发。
      • finished:视频播放完成时触发。

这样点击播放就会播放视频了.

  1. RawImage组件:

    • 通常与 VideoPlayer 组件一起使用,用于在游戏场景中显示视频。将 VideoPlayer 的 targetTexture 分配给 RawImage 的 texture 属性,即可在屏幕上显示视频。

也可以新建一个材质

这样把材质添加到一个物体上,物体表面就会显示出来视频.

三、视频播放控制

  1. 播放、暂停和停止:
    • 可以通过脚本控制 VideoPlayer 的 Play()Pause() 和 Stop() 方法来播放、暂停和停止视频。
    • 例如:
using UnityEngine;
using UnityEngine.Video;

public class VideoController : MonoBehaviour
{
    public VideoPlayer videoPlayer;

    void Start()
    {
        videoPlayer.Play();
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            if (videoPlayer.isPlaying)
            {
                videoPlayer.Pause();
            }
            else
            {
                videoPlayer.Play();
            }
        }
    }
}
  1. 进度控制:

    • 可以通过修改 VideoPlayer 的 time 属性来设置视频的播放进度。例如,将 time 设置为视频总时长的一半,可以将视频跳转到中间位置。
    • 也可以通过获取 VideoPlayer 的 frame 属性来获取当前播放的视频帧,并通过设置 frame 属性来跳转到特定的帧。
    • using UnityEngine;
      using UnityEngine.Video;
      
      public class VideoProgressController : MonoBehaviour
      {
          public VideoPlayer videoPlayer;
      
          void Update()
          {
              if (Input.GetKeyDown(KeyCode.RightArrow))
              {
                  videoPlayer.time += 5; // 快进 5 秒
              }
              else if (Input.GetKeyDown(KeyCode.LeftArrow))
              {
                  videoPlayer.time -= 5; // 后退 5 秒
              }
          }
      }
  2. 音量控制:

    • 可以通过修改 VideoPlayer 的 volume 属性来控制视频的音量大小。取值范围为 0(静音)到 1(最大音量)。
    • using UnityEngine;
      using UnityEngine.Video;
      
      public class VideoVolumeController : MonoBehaviour
      {
          public VideoPlayer videoPlayer;
      
          void Update()
          {
              if (Input.GetKeyDown(KeyCode.UpArrow))
              {
                  videoPlayer.volume += 0.1f; // 音量增加 0.1
              }
              else if (Input.GetKeyDown(KeyCode.DownArrow))
              {
                  videoPlayer.volume -= 0.1f; // 音量减少 0.1
              }
          }
      }

四、视频与游戏交互

  1. 触发事件:
    • 可以在视频的特定时间点触发事件,例如在视频播放到某个时刻时执行特定的游戏逻辑。可以使用 VideoPlayer 的 time 属性和事件函数来实现这一功能。
    • 例如,在视频播放到 10 秒时触发一个游戏事件:
using UnityEngine;
using UnityEngine.Video;

public class VideoEventTrigger : MonoBehaviour
{
    public VideoPlayer videoPlayer;

    void Update()
    {
        if (videoPlayer.time >= 10 &&!videoPlayer.isPaused)
        {
            TriggerGameEvent();
        }
    }

    void TriggerGameEvent()
    {
        Debug.Log("Video event triggered!");
    }
}
  1. 视频作为游戏背景:
    • 可以将视频作为游戏场景的背景,通过将 VideoPlayer 的 targetTexture 分配给一个材质,并将该材质应用到一个平面或其他游戏对象上,以实现视频背景效果。
    • using UnityEngine;
      using UnityEngine.Video;
      
      public class VideoBackground : MonoBehaviour
      {
          public VideoPlayer videoPlayer;
          public Material backgroundMaterial;
      
          void Start()
          {
              videoPlayer.Play();
              backgroundMaterial.mainTexture = videoPlayer.targetTexture;
          }
      }

五、性能和优化

  1. 视频分辨率和质量:

    • 选择合适的视频分辨率和质量,以平衡视觉效果和性能。较高分辨率和质量的视频可能会占用更多的内存和处理资源。可以在导入视频时设置视频的压缩选项,以减小视频文件的大小。
  2. 视频缓存:

    • 如果视频需要频繁播放或在不同场景中使用,可以考虑使用视频缓存技术,以减少视频的加载时间和提高性能。可以使用 Unity 的资源加载和缓存系统来实现视频的缓存。
  3. 移动平台优化:

    • 在移动平台上,需要特别注意视频播放的性能和功耗问题。可以考虑使用硬件加速的视频解码和优化视频的播放设置,以提高性能和减少电池消耗。例如,可以使用 VideoPlayer 的 renderMode 属性设置为 VideoRenderMode.APIOnly 来使用硬件加速解码。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux系统练习笔记【完整版】

✨博客主页: https://blog.csdn.net/m0_63815035?typeblog 💗《博客内容》:.NET、Java.测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识 📢博客专栏: https://blog.csdn.net/m0_63815035/cat…

力扣1235.规划兼职工作

力扣1235.规划兼职工作 动态规划 二分 将所有工作按照结束时间排序f[i]表示前i个工作可获取的最大收益状态转移:取第i个工作,f[i] profit[i] f[j],其中j为结束时间小于i的开始时间的最大数不取第i个工作,f[i] f[i-1]可以通过二…

CSS中的align-content属性:实现垂直居中的新方式

引言 在CSS的漫长发展历程中,垂直居中一直是一个令人头疼的问题。不过,好消息是,到了2024年,CSS终于引入了一种新的方式来实现垂直居中,那就是使用align-content属性。本文将详细介绍align-content的使用方式&#xff…

SYN6288语音合成模块的简单应用

文章目录 一、前言二、硬件1.原理图1.1 对外引脚说明1.2 电源供电参考电路1.3 复位电路和状态指示电路1.4 扬声器输出1.5 外接高速晶振 三、软件1.系统构成框图2.通讯方式:异步串行通讯(UART)接口3.芯片回传4. 通信帧定义及通信控制4.1 命令帧…

【Eureka】搭建Eureka Server,实现服务注册和服务发现

1. Eureka介绍 Eureka是NetflixOSS套件中关于服务注册和发现的解决⽅案.SpringCloud对Eureka进⾏了集成,并作为优先推荐⽅案进⾏宣传,虽然⽬前Eureka2.0已经停⽌维护,新的微服务架构设计中,也不再建议使用,但是⽬前依然有⼤量公司的微服务系统使⽤Eureka作为注册中⼼. 官方文…

指尖疯2024年下半年软考报名快报:赛程过半,你报名成功了吗?

周一早上好,新的一周,新的9月! 特别提醒:青海和上海,这两个“海”今天截止报名!已经结束报名的地区已经增长到了13个,目前2024年下半年软考报名已经过半,考虑到还有审核时间以及报名…

原生冻结进程分析(U)

一、概要 1.定义: 当应用切换到后台并且没有其他活动时,系统会在一定时间内通过状态判断,将进程 ID 迁移到冻结的 cgroup 节点上,实现冻结 CACHE 应用。这项功能可以减少活跃缓存应用在后台存在时所消耗的 CPU 资源,从…

Nginx安全性配置

文章目录 引言I Nginx简单的安全性配置禁止特定的HTTP方法限制URL长度禁止某些用户代理限制请求速率连接限制禁止访问某些文件类型II 常见的安全规则防御CC攻击User-Agent过滤GET-URL过滤GET-参数过滤POST过滤(sql注入、xss攻击 )引言 Nginx本身并不具备复杂的防火墙规则定制…

NASA数据集:ASTER全球数字海拔模型(GTEM)V003

ASTER Digital Elevation Model V003 简介 ASTER全球数字海拔模型(GTEM)第3版(ASTG TM)提供了地球陆地区域的全球数字海拔模型(TEM),空间分辨率为1角秒(赤道处水平位置约30米&…

k8s集群环境搭建(一主二从--kubeadm安装)

前置条件 版本:CentOS Linux release 7.5.1804 (Core) 内存:2G CPU:2 主机名解析 vim /etc/hosts 192.168.109.100 master 192.168.109.101 node1 192.168.109.102 node2时间同步,这里直接使用chronyd服务从网络同步时间syste…

企业产品推广系统小程序的设计

管理员账户功能包括:系统首页,个人中心,用户管理,活动资讯管理,产品分类管理,产品信息管理,用户分享管理,留言板管理,系统管理 微信端账号功能包括:系统首页…

C语言 | Leetcode C语言题解之第388题文件的最长绝对路径

题目: 题解: #define MAX(a, b) ((a) > (b) ? (a) : (b))int lengthLongestPath(char * input){int n strlen(input);int pos 0;int ans 0;int * level (int *)malloc(sizeof(int) * (n 1));memset(level, 0, sizeof(int) * (n 1));while (po…

LabVIEW电机多次调用

在LabVIEW中,为实现对多个电机的独立控制,工程师可以采用可重入VI、动态VI调用、多任务结构或面向对象编程等方法。每种方法都有其优点和适用场景,选择合适的方法能有效提升系统的性能和可维护性。 在LabVIEW中,如果需要多次调用…

WPF 手撸插件 六 消息总线

虽然暂时不知道该如何将消息总线集成到插件系统中,但是让我先学习起来吧,本文主要来说说我最近学习的Reface.EventBus Reface.EventBus有两个版本,分别支持.Net Framework和 .Net Core。 我们这里先说支持.Net Framework的版本,…

007.Python爬虫系列_初识爬虫

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈 入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈 虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈 PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈 Oracle数…

javaSSMmysql宠物领养系统的设计与实现26292-计算机毕业设计项目选题推荐(附源码)

摘 要 如今,随着人们生活水平不断提高,人们的生活在物质满足的基础上,更多的人将生活的重点放在追求精神享受的过程中。于此同时,Internet铺天盖地的普及,使得这样的人纷纷通过Internet的方式去寻找精神的满足。然而领…

java+Springboot+mysql小区维修管理平台41866-计算机毕业设计项目选题推荐(免费领源码)

摘 要 随着计算机技术的飞速发展,计算机在小区维修管理中应用的普及,利用计算机在实现小区维修的管理势在必行。当今社会正快速向信息化社会前进,信息自动化的作用也越来越大。从而使我们从繁杂的事务中解放出来,提高了我们的工作效率。目前…

Web入门-06.HTTP协议-协议解析

浏览器发起HTTP协议请求,服务端通过ServerSocket接收并交给一个Socket对象(管道),然后解析浏览器的请求,并通过Socket管道向浏览器响应。 代码如下: package com.gjw;import java.io.*; import java.net…

学习之git的常用命令

git常用命令 设置用户签名 基本语法: 1.1 git config --global user.name 用户名 1.2 git config – global user.email 邮箱 1.3 cat ~/.gitconfig 1.4 git init 初始化本地库 在D盘新建一个文件夹—进入文件夹–右键–点击(open git base here) …

低代码技术新趋势——逆向工程

低代码的下一个趋势,应该是“逆向工程”,用户可以通过 可视化界面,逆向输出全栈工程代码。而标准的工程代码同样可以编译为支持可视化分析、编辑、调整的“无代码”程序。前一个是解释性语言向编译性语言的逆向工程。后者则是一个理论实践应用…