unity 播放视频
在开发过程中,有时需要在 Unity 里实现视频播放功能。本文将介绍两种在 Unity 中播放视频的方法。
支持的视频格式与准备工作
Unity 支持的播放视频格式有 .mov、.mpg、.mpeg、.mp4、.avi 和 .asf。要播放视频,只需将对应的视频文件拖拽入 Project 视图,Unity 会自动生成对应的 MovieTexture 对象。例如,将 default_video.mp4 拖拽入 Project 视图中,如果视频中含有音频,会对应生成 audio 文件;若视频没有音频,则不会生成 audio 文件。
接着,在 Hierarchy 视图中创建一个 Plane 对象,视频将在该对象上播放。同时,添加 Directional light(世界定向光)用于照亮整个游戏场景,最后让 Main Camera 对象直直地照射在 Plane 对象上。
方法一:基于 Plane 对象播放视频
脚本赋值与使用
使用对象拖拽的形式为 MovieTexture 对象赋值后,就可以在脚本中直接使用它。以下是 Test.cs 脚本的代码:
using UnityEngine;
using System.Collections;
public class Test : MonoBehaviour
{
// 电影纹理
public MovieTexture movTexture;
void Start()
{
// 设置当前对象的主纹理为电影纹理
renderer.material.mainTexture = movTexture;
// 设置电影纹理播放模式为循环
movTexture.loop = true;
}
void OnGUI()
{
if (GUILayout.Button("播放/继续"))
{
// 播放/继续播放视频
if (!movTexture.isPlaying)
{
movTexture.Play();
}
}
if (GUILayout.Button("暂停播放"))
{
// 暂停播放
movTexture.Pause();
}
if (GUILayout.Button("停止播放"))
{
// 停止播放
movTexture.Stop();
}
}
}
点击按钮后,就能轻松实现播放、暂停、停止操作。默认视频大小可以在编辑器中直接缩放 Plane 对象平面。若需要在游戏运行中动态缩放平面,可使用以下代码:
transform.localScale = new Vector3(1, 1, 1);
模型默认缩放系数为 1,通过调节平面 X、Y、Z 三个方向的缩放系数,平面的大小会随之改变,对应视频的大小也会相应改变。
方法二:基于 GUI 播放视频
可以把之前创建的 Plane 对象以及世界定向光删除,直接将脚本绑定在摄像机对象中,然后对之前的游戏脚本进行简单修改。以下是修改后的 Test.cs 脚本代码:
using UnityEngine;
using System.Collections;
public class Test : MonoBehaviour
{
// 电影纹理
public MovieTexture movTexture;
void Start()
{
// 设置电影纹理播放模式为循环
movTexture.loop = true;
}
void OnGUI()
{
// 绘制电影纹理
GUI.DrawTexture(new Rect(0, 0, Screen.width, Screen.height), movTexture, ScaleMode.StretchToFill);
if (GUILayout.Button("播放/继续"))
{
// 播放/继续播放视频
if (!movTexture.isPlaying)
{
movTexture.Play();
}
}
if (GUILayout.Button("暂停播放"))
{
// 暂停播放
movTexture.Pause();
}
if (GUILayout.Button("停止播放"))
{
// 停止播放
movTexture.Stop();
}
}
}
在 GUI 中播放视频的原理是直接通过 GUI 调用 DrawTexture 方法,这和绘制贴图有些相似。目前播放视频的大小是屏幕的宽高,如果想动态修改视频的宽或高,直接修改 new Rect() 视频显示区域即可。此时,视频会满满地填充在整个 GUI 中。
综上所述,在 Unity 中播放视频并不复杂,通过以上两种方法可以满足不同场景下的视频播放需求。