1.在UI上新建一个Raw Image
2.添加Video Player
【参数详解】
- Source:视频源类型,有Video Clip 和 URL两种
- Video Clip:视频片段,当Source选择video clip生效
- URL:视频路径,当Source选择URL生效
- Play On Awake:启动时播放视频
- Wait For First Frame:是否在第一帧加载完成后才播放,只有在 Play On Awake 被勾选时才会生效;
- Loop:是否开启循环播放;
- SkipOnDrop:是否允许VideoPlayer跳过帧以赶上当前时间
- 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 时才会有此选项
- TargetTexture:渲染视频时要绘制的图形,当 Render Mode 选择为 Render Texture 时才会有此选项
- Audio Output Mode:音频输出模式,主要有:
①None(不输出音频)
②AudioSource(用 AudioSource 播放)
③Direct(直接发送到音频输出硬件)
3.在工程里创建Render Texture,放入自己指定的文件夹下。
4.选择刚刚创建的Render Texture,改个名字,然后根据自己的需求调整大小
5.设置参数
①修改Source类型为URL
②Play On Awake去掉勾选,由程序控制。
6.StreamingAssets文件夹下加入要播放的cg视频
如果没有StreamingAssets文件夹,那么自己就新建一个。
7.新建一个VideoView.cs脚本,加入以下测试代码
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Video;
public class VideoView : MonoBehaviour
{
public RawImage mRawImage;
public VideoPlayer mVideoPlayer;
public RenderTexture rt;
//跳过按钮
public Button skipBtn;
private bool bStop = false;
void Start()
{
if (skipBtn != null)
{
skipBtn.onClick.AddListener(OnSkipBtn);
}
//视频播放结束事件
mVideoPlayer.loopPointReached += OnMediaPlayerEvent;
}
public void OnMediaPlayerEvent(VideoPlayer source)
{
if (bStop)
return;
Stop();
}
//播放视频
public void Play(string videoPath)
{
bStop = false;
mRawImage.texture = rt;
mVideoPlayer.url = Application.streamingAssetsPath + "/" + videoPath; ;
mVideoPlayer.Play();
}
//暂停
public void Pause()
{
mVideoPlayer.Pause();
}
//跳过
void OnSkipBtn()
{
Stop();
}
//停止
public void Stop()
{
if (bStop)
return;
bStop = true;
mVideoPlayer.Stop();
}
private void OnDestroy()
{
mVideoPlayer.loopPointReached -= OnMediaPlayerEvent;
}
}
8.把脚本挂到任意一个gameobject上,然后按照如图加入参数。
9.调用测试
10.如果播放的分辨率有问题,可以调整Aspect Ratio的模式
- NoScaling:保留像素大小而不调整目标区域
- FitVertically:按比例调整大小,使高度适合目标区域,按需进行裁剪或在每一侧添加黑条。
- FitHorizontally:按比例调整大小,使宽度适合目标区域,按需进行裁剪或在上方和下方添加黑条。
- FitInside:按比例调整大小,使内容适合目标区域,按需添加黑条。
- FitOutside:按比例调整大小,使内容适合目标区域,按需进行裁剪。
- Stretch:不按比例调整大小,以适应目标区域。