使用视频播放器组件可将视频文件附加到游戏对象,然后在运行时在游戏对象的纹理上播放。
以下截屏显示了一个连接到球形游戏对象的视频播放器组件。
默认情况下,视频播放器组件的__材质属性 (Material Property)__ 设置为游戏对象的主纹理,这意味着视频播放器组件附加到具有渲染器的游戏对象时,它会自动将自身分配给该渲染器上的纹理(因为这是该游戏对象的主纹理)。此处,游戏对象有一个网格渲染器 (Mesh Renderer) 组件,因此视频播放器会自动将其分配给 Renderer 字段,这意味着视频剪辑会在网格渲染器的纹理上播放。
还可设置要播放视频的特定目标,包括:
| 属性 | 描述 | ||
|---|---|---|---|
| Source | 选择视频源类型。 | ||
| Video Clip | 选择要分配给视频播放器组件的视频剪辑。Web 平台不支持此选项。 | ||
| URL | 输入 URL(要分配给视频播放器的视频的 http:// 或 file://))。 | ||
| Update Mode | 设置视频播放器组件用于更新其时序的时钟源。 | ||
| DSP Time | 使用处理音频的相同时钟源。 | ||
| Game Time | 使用与游戏时钟相同的时钟源。此时钟源受时间标度和捕获帧率设置的影响。 | ||
| Unscaled Game Time | 使用与游戏时钟相同的时钟源,但不会受到时间标度或捕获帧率的影响。 | ||
| Play On Awake | 在场景启动时播放视频。如果希望在运行时的另一个点触发视频播放,请将其清除。此情况下可使用 Play() 命令通过脚本触发视频播放。 |
||
| Wait For First Frame | 在游戏开始前等待源视频的第一帧准备好显示。要使视频时间与游戏的其余部分保持同步,请将其清除,这可能会导致前几帧被丢弃。 | ||
| Loop | 在源视频到达其结尾时循环播放。清除此选项可在视频到达结尾时停止播放视频。 | ||
| Skip On Drop | 启用此选项时,如果视频播放器组件检测到播放位置与游戏时钟之间存在漂移,则视频播放器会跳过。禁用此选项时,视频播放器不会纠正漂移,而是系统性地播放所有帧。 | ||
| Playback Speed | 将播放速度的乘数设置为 0 到 10 之间的值。默认情况下,该字段设置为 1(正常速度)。如果该字段设置为 2,则视频以其正常速度的两倍进行播放。 | ||
| Render Mode | 选择视频的渲染方式。 | ||
| Camera Far Plane | 在摄像机的远平面上渲染视频。 | ||
| Camera Near Plane | 在摄像机的近平面上渲染视频。 | ||
| Render Texture | 将视频渲染到渲染纹理中。 | ||
| Material Override | 通过游戏对象渲染器的材质将视频渲染到游戏对象的选定纹理属性中。 | ||
| API Only | 将视频渲染到 VideoPlayer.texture 脚本 API 属性中。必须使用脚本将纹理分配给其预期目标。 | ||
| Camera | 定义接收视频的摄像机。 | ||
| Alpha | 设置要添加到源视频的全局透明度级别。此属性允许透过平面看到平面背后的元素。请参阅视频透明度支持文档以了解有关 alpha 通道的更多信息。 | ||
| 3D Layout | 选择源视频中 3D 内容的布局。 | ||
| None | 视频没有任何 3D 内容。 | ||
| Side by Side | 视频具有 3D 内容,其中左眼占据视频帧的左半部分,右眼占据视频帧的右半部分。 | ||
| Over Under | 视频具有 3D 内容,其中左眼占据视频帧的上半部分,右眼占据视频帧的下半部分。 | ||
| Target Texture | 定义视频播放器组件用于渲染图像的渲染纹理。 | ||
| Aspect Ratio | 在使用相应的渲染模式 (Render Mode) 时,用于填充摄像机近平面 (Camera Near Plane)、摄像机远平面 (Camera Far Plane) 或渲染纹理 (Render Texture) 的图像的宽高比。 | ||
| No Scaling | 不使用缩放。视频在目标矩形内居中。 | ||
| Fit Vertically | 对源进行缩放以垂直适应目标矩形,在必要时裁剪左侧和右侧或在每侧留下黑色区域。此情况下保留源宽高比。 | ||
| Fit Horizontally | 对源进行缩放以水平适应目标矩形,在必要时裁剪顶部和底部区域或在顶部和底部留下黑色区域。此情况下保留源宽高比。 | ||
| Fit Inside | 对源进行缩放以适合目标矩形而不必裁剪。根据需要,在左侧和右侧或上方和下方留下黑色区域。此情况下保留源宽高比。 | ||
| Fit Outside | 对源进行缩放以适应目标矩形,而不必在左侧和右侧或上方和下方留下黑色区域,可根据需要进行裁剪。此情况下保留源宽高比。 | ||
| Stretch | 在水平和垂直方向均进行缩放以适应目标矩形。不会保留源宽高比。 | ||
| Renderer | 选择视频播放器组件用于渲染图像的渲染器。设置为 None 时,使用与视频播放器组件位于同一游戏对象上的渲染器。 | ||
| Auto-Select Property | 启用此选项后,视频播放器组件会自动选择渲染器的主纹理。禁用此选项时,可以手动设置材质属性选项。 | ||
| Material Property | 接受视频播放器组件图像的材质纹理属性的名称。 | ||
| Audio Output Mode | 定义如何输出源的音频轨道。 | ||
| None | 未播放音频。 | ||
| Audio Source | 音频样本发送到选定音频源,允许应用 Unity 的音频处理。 | ||
| Direct | 音频样本绕过 Unity 的音频处理,直接发送到音频输出硬件。 | ||
| API Only (Experimental) | 音频样本将发送到关联的 AudioSampleProvider。 | ||
| Controlled Tracks | 视频中的音频轨道数量。 仅当来源 (Source) 为 URL 时显示。来源 (Source) 为视频剪辑 (Video Clip) 时,通过检查视频文件来确定轨道数。 |
||
| Track Number | 启用关联的音频轨道以用于播放。必须在播放前设置此选项。 复选框左侧的文本提供有关音频轨道的信息,特别是轨道编号、语言和声道数。 当来源为 URL 时,此信息仅在播放期间可用。 仅当源是具有一个或多个音轨的视频剪辑,或源是 URL 时,才显示此属性(允许您指示 URL 在播放期间预计有多少轨道)。 |
||
| Audio Source | 用于播放音频轨道的音频源。目标音频源也可以播放音频剪辑。 音频源的播放控件(脚本 API 中的 Play On Awake 和 Play())不适用于视频源的音轨。仅当音频输出模式 (Audio Output Mode) 设置为音频源 (Audio Source) 时,才显示此属性。 |
||
| Mute | 将关联的音频轨道静音。在音频源 (Audio Source) 模式中,将使用音频源的控件。 仅当音频输出模式 (Audio Output Mode) 设置为直接 (Direct) 时,才显示此属性。 |
||
| Volume | 关联音频轨道的音量。在音频源 (Audio Source) 模式中,将使用音频源的音量。 仅当音频输出模式 (Audio Output Mode) 设置为直接 (Direct) 时,才显示此属性。 |
||
以下脚本演示了视频播放器组件的一些功能。
// Examples of Video Player function
using UnityEngine;
public class Example : MonoBehaviour
{
void Start()
{
// Will attach a Video Player to the main camera.
GameObject camera = GameObject.Find("Main Camera");
// VideoPlayer automatically targets the camera backplane when it is added
// to a camera object, no need to change videoPlayer.targetCamera.
var videoPlayer = camera.AddComponent<UnityEngine.Video.VideoPlayer>();
// Play on awake defaults to true. Set it to false to avoid the url set
// below to auto-start playback since we're in Start().
videoPlayer.playOnAwake = false;
// By default, Video Players added to a camera will use the far plane.
// Let's target the near plane instead.
videoPlayer.renderMode = UnityEngine.Video.VideoRenderMode.CameraNearPlane;
// This will cause our Scene to be visible through the video being played.
videoPlayer.targetCameraAlpha = 0.5F;
// Set the video to play. URL supports local absolute or relative paths.
// Here, using absolute.
videoPlayer.url = "/Users/graham/movie.mov";
// Skip the first 100 frames.
videoPlayer.frame = 100;
// Restart from beginning when done.
videoPlayer.isLooping = true;
// Each time we reach the end, we slow down the playback by a factor of 10.
videoPlayer.loopPointReached += EndReached;
// Start playback. This means the Video Player may have to prepare (reserve
// resources, pre-load a few frames, etc.). To better control the delays
// associated with this preparation one can use videoPlayer.Prepare() along with
// its prepareCompleted event.
videoPlayer.Play();
}
void EndReached(UnityEngine.Video.VideoPlayer vp)
{
vp.playbackSpeed = vp.playbackSpeed / 10.0F;
}
}
VideoPlayer