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();
}
}
}
}