使用视频播放器组件可将视频文件附加到游戏对象,然后在运行时在游戏对象的纹理上播放。
以下截屏显示了一个连接到球形游戏对象的视频播放器组件。
默认情况下,视频播放器组件的__材质属性 (Material Property)__ 设置为 _MainTex__,这意味着视频播放器组件附加到具有渲染器的游戏对象时,它会自动将自身分配给该渲染器上的纹理(因为这是该游戏对象的主纹理)。此处,游戏对象有一个网格渲染器 (Mesh Renderer) 组件,因此视频播放器会自动将其分配给 Renderer 字段,这意味着视频剪辑会在网格渲染器的纹理上播放。
还可设置要播放视频的特定目标,包括:
属性 | 功能 | |||
---|---|---|---|---|
Source | 选择视频源类型。 | |||
Video Clip | 将视频剪辑分配给视频编辑器。 | |||
Video Clip | Use this field to define the Video Clip assigned to the Video Player component. Drag-and-drop the video file into this field, or click the circle to the right of the field and choose it from a list of Assets if it is in your Project folder. This isn’t supported in WebGL. | |||
URL | 从 URL(例如 http:// 或 file://)分配视频。Unity 在运行时从此 URL 读取视频。 | |||
URL | 输入要分配给视频播放器的视频的 URL。 | |||
Browse… | 单击此项可快速浏览本地文件系统并打开以 file:// 开头的 URL。 | |||
Play On Awake | 勾选 Play On Awake 复选框可在场景启动时播放视频。如果希望在运行时的另一个点触发视频播放,请取消勾选此复选框。此情况下可使用 Play() 命令通过脚本触发视频播放。 |
|||
Wait For First Frame | 如果勾选 Wait For First Frame 复选框,Unity 将在游戏开始前等待源视频的第一帧准备好显示。如果取消勾选此复选框,可能会丢弃前几帧以使视频时间与游戏的其余部分保持同步。 | |||
Loop | 勾选 Loop 复选框可使视频播放器组件在源视频到达结尾时循环播放视频。如果未勾选此复选框,视频到达结尾时将停止播放。 | |||
Playback Speed | 此滑动条和数字字段表示播放速度的乘数,为 0 到 10 之间的值。默认情况下,该字段设置为 1(正常速度)。如果该字段设置为 2,则视频以其正常速度的两倍进行播放。 | |||
Render Mode | 使用下拉选单来定义视频的渲染方式。 | |||
Camera Far Plane | 在摄像机的远平面上渲染视频。 | |||
Camera Near Plane | 在摄像机的近平面上渲染视频。 | |||
Camera | 定义接收视频的摄像机。 | |||
Alpha | 添加到源视频的全局透明度级别。此属性允许透过平面看到平面背后的元素。请参阅视频透明度支持文档以了解有关 Alpha 通道的更多信息。 | |||
Render Texture | 将视频渲染到渲染纹理中。 | |||
Target Texture | 定义视频播放器组件用于渲染图像的渲染纹理。 | |||
Material Override | 通过游戏对象渲染器的材质将视频渲染到游戏对象的选定纹理属性中。 | |||
Renderer | 视频播放器组件用于渲染图像的渲染器。设置为 None 时,使用与视频播放器组件位于同一游戏对象上的__渲染器。 | ||| Material Property__ | 接受视频播放器组件图像的材质纹理属性的名称。 | ||
API Only | 将视频渲染到 VideoPlayer.texture 脚本 API 属性中。必须使用脚本将纹理分配给其预期目标。 | |||
Aspect Ratio | 在使用相应的__渲染模式 (Render Mode)时,用于填充__摄像机近平面 (Camera Near Plane)、摄像机远平面 (Camera Far Plane) 或__渲染纹理 (Render Texture)__ 的图像的宽高比。 | |||
No Scaling | 不使用缩放。视频在目标矩形内居中。 | |||
Fit Vertically | 对源进行缩放以垂直适应目标矩形,在必要时裁剪左侧和右侧或在每侧留下黑色区域。此情况下保留源宽高比。 | |||
Fit Horizontally | 对源进行缩放以水平适应目标矩形,在必要时裁剪顶部和底部区域或在顶部和底部留下黑色区域。此情况下保留源宽高比。 | |||
Fit Inside | 对源进行缩放以适合目标矩形而不必裁剪。根据需要,在左侧和右侧或上方和下方留下黑色区域。此情况下保留源宽高比。 | |||
Fit Outside | 对源进行缩放以适应目标矩形,而不必在左侧和右侧或上方和下方留下黑色区域,可根据需要进行裁剪。此情况下保留源宽高比。 | |||
Stretch | 在水平和垂直方向均进行缩放以适应目标矩形。不会保留源宽高比。 | |||
Audio Output Mode | 定义如何输出源的音频轨道。 | |||
None | 不播放音频。 | |||
Audio Source | 音频样本发送到选定音频源,允许应用 Unity 的音频处理。 | |||
Direct | 音频样本绕过 Unity 的音频处理,直接发送到音频输出硬件。 | |||
API Only (Experimental) | 音频样本发送到关联的 AudioSampleProvider。 | |||
Controlled Tracks | 视频中的音频轨道数量。 仅在 Source 为 URL 时显示。Source 为 Video Clip 时,通过检查视频文件来确定轨道数。 |
|||
Track Enabled | 勾选相关复选框进行启用后,关联的音频轨道将用于播放。必须在播放前设置此项。 复选框左侧的文本提供有关音频轨道的信息,具体而言就是音频轨道编号、语言和通道数。 例如,在以上截屏中,文本为 Track 0 [und.1 ch]。这表示它是第一个音频轨道 (Track 0),语言未定义 (und.),并且该音频轨道有一个声道 (1 ch),表示它是单声道音频轨道。 当源为 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 时,才显示此属性。 |
以下脚本演示了 VideoPlayer 组件的一些功能。
// VideoPlayer 函数示例
using UnityEngine;
public class Example : MonoBehaviour
{
void Start()
{
// 将一个 VideoPlayer 附加到主摄像机。
GameObject camera = GameObject.Find("Main Camera");
// 将 VideoPlayer 添加到摄像机对象时,
// 它会自动瞄准摄像机背板,无需更改 videoPlayer.targetCamera。
var videoPlayer = camera.AddComponent<UnityEngine.Video.VideoPlayer>();
// Play on Awake 默认为 true。将它设置为 false 以避免下面设置的 URL
// 自动开始播放,因为我们处于 Start() 状态。
videoPlayer.playOnAwake = false;
// 默认情况下,添加到摄像机的 VideoPlayer 将使用远平面。
// 让我们改为瞄准近平面。
videoPlayer.renderMode = UnityEngine.Video.VideoRenderMode.CameraNearPlane;
// 这将使场景通过正在播放的视频可见。
videoPlayer.targetCameraAlpha = 0.5F;
// 设置要播放的视频。URL 支持本地绝对或相对路径。
// 此处使用绝对路径。
videoPlayer.url = "/Users/graham/movie.mov";
// 跳过前 100 帧。
videoPlayer.frame = 100;
// 完成后从头重新开始。
videoPlayer.isLooping = true;
// 每次到达结尾时,我们都会将播放速度减慢 10 倍。
videoPlayer.loopPointReached += EndReached;
// 开始播放。这意味着 VideoPlayer 可能需要做好准备工作(预留
// 资源、预加载几帧等)。为了更好地控制此项准备工作
// 带来的延迟,您可以使用 videoPlayer.Prepare() 及其
// prepareCompleted 事件。
videoPlayer.Play();
}
void EndReached(UnityEngine.Video.VideoPlayer vp)
{
vp.playbackSpeed = vp.playbackSpeed / 10.0F;
}
}
2017–05–07 页面已修订
Unity 5.6 中的新功能