• 【Unity3D】VideoPlayer组件


    1 简介

            AudioSource组件中介绍了音频的播放,本文将介绍基于 VideoPlayer 组件实现视频播放

            VideoPlayer 属性面板如下:

    • Source:视频源类型,有 2 种类型:Video Clip、URL;
    • Video Clip:视频片段;
    • Play On Awake:启动时播放视频;
    • Wait For First Frame:是否在第一帧加载完成后才播放,只有在 Play On Awake 被勾选时才会生效;
    • Loop:是否开启循环播放;
    • Playback Speed:播放速度;
    • Render Mode:渲染模式,主要有:Camera Far Plane(在相机远平面上播放,需要绑定到相机,此时其他物体都在视频前面)、Came Near Plane(在相机近平面上播放,需要绑定到相机,此时其他物体都在视频后面)、Render Texture(视频的每一帧输出到 Render Texture 文件中,可以使用 RayImage 显示 Render Texture,这样视频就可以在 RayImage 中播放)、Material Override(需要绑定到一个 Renderer 对象,如 Cube 的 MeshRenderer,这样视频就可以在立方体表面播放);
    • Renderer:渲染器,当 Render Mode 选择为 Material Override 时才会有此选项,如:将 Hierarchy 窗口的 Cube 对象拖拽到 Renderer 中,视频就会在 Cube 表面播放;
    • Audio Output Mode:音频输出模式,主要有:None(不输出音频)、AudioSource(用 AudioSource 播放)、Direct(直接发送到音频输出硬件)。

    2 播放视频

            1)在 RayImage 中播放视频

            在 Hierarchy 窗口创建一个 Empty 对象,并为其添加 VideoPlayer 组件,将视频片段拖拽到 Video Clip 中,勾选 Loop 选项,调整 Render Mode 为 Render Texture;在 Assets 窗口创建 Render Texture 文件,并将该文件拖拽到 VideoPlayer 组件中的 Target Texture 中。VideoPlayer 组件配置如下:

            在 Hierarchy 窗口创建一个 RayImage 对象,调整其宽高分别为 600、300,并将 Assets 窗口的 Render Texture 文件拖拽到 RayImage 的 Texture 选项中,如下:

            运行效果如下:

            2)在立方体表面播放视频

            在 Hierarchy 窗口创建一个 Cube 对象,并为其添加 VideoPlayer 组件,将视频片段拖拽到 Video Clip 中,勾选 Loop 选项,调整 Render Mode 为 Material Override,并将 Cube 对象拖拽到 Renderer 中,VideoPlayer 组件配置如下:

             运行效果如下:

            3)在胶囊体表面播放视频

            在 Hierarchy 窗口创建一个 Capsule 对象,并为其添加 VideoPlayer 组件,其配置方法同第(2 节,运行效果如下:

    3 播放视频(代码控制)

            在 Hierarchy 窗口创建一个 RayImage 对象,并为其添加 VideoPlayer 组件,调整 Render Mode 为 Render Texture;在 Assets 窗口创建 Render Texture 文件,并将该文件拖拽到 VideoPlayer 组件中的 Target Texture 中以及 RayImage 组件的 Texture 中,配置如下:

             给 RayImage 对象添加脚本组件如下:

            VideoController.cs

    1. using UnityEngine;
    2. using UnityEngine.Video;
    3. public class VideoController : MonoBehaviour {
    4. private VideoPlayer videoPlayer;
    5. private void Awake() {
    6. videoPlayer = GetComponent();
    7. videoPlayer.isLooping = true;
    8. videoPlayer.playOnAwake = false;
    9. videoPlayer.clip = (VideoClip) Resources.Load("Video/Video");
    10. videoPlayer.Prepare(); // 播放引擎准备(提高开始播放时的速度)
    11. }
    12. private void Start() {
    13. videoPlayer.Play(); // 播放
    14. }
    15. private void Update() {
    16. if (Input.GetKeyDown(KeyCode.Space)) {
    17. if (videoPlayer.isPlaying) {
    18. videoPlayer.Pause(); // 暂停
    19. } else {
    20. videoPlayer.Play(); // 播放
    21. }
    22. }
    23. }
    24. }

            运行效果:

            同第 2 章第 1)节,按空格键,可以控制视频播放和暂停。

  • 相关阅读:
    STM32开发_利用SPI协议读写SD卡、介绍SD卡SPI时序
    Matlab论文插图绘制模板第48期—平行坐标图(Parallelplot)
    计算机毕业设计Java网上主题超市系统(源码+系统+mysql数据库+Lw文档)
    文件缓存的读写
    SQL 基础篇 SQL 22 统计每个学校的答过题的用户的平均答题数
    物联网技术融合成为新趋势,LPWAN2.0泛在物联·ZETA生态大会在深圳召开
    算法 day29 回溯5
    制造业到底要不要做数字化改革?_光点科技
    忘记开机密码啦!我教你用ventoy找回密码
    ArrayList源码分析
  • 原文地址:https://blog.csdn.net/m0_37602827/article/details/126671476