Version: 2023.1
视频概述
从 MovieTexture 迁移到 VideoPlayer

视频播放器 (Video Player) 组件

使用视频播放器组件可将视频文件附加到游戏对象,然后在运行时在游戏对象的纹理上播放。

以下截屏显示了一个连接到球形游戏对象的视频播放器组件。

By default, the Material Property of a Video Player component is set to a GameObject’s main texture, which means that when the Video Player component is attached to a GameObject that has a Renderer, it automatically assigns itself to the Texture on that Renderer (because this is the main Texture for the GameObject). Here, the GameObject has a Mesh Renderer component, so the Video Player automatically assigns it to the Renderer field, which means the Video Clip plays on the Mesh Renderer’s Texture.

A Video Player component attached to a spherical GameObject, playing the Video Clip on the GameObject’s main Texture (in this case, the Texture of the Mesh Renderer)
A Video Player component attached to a spherical GameObject, playing the Video Clip on the GameObject’s main Texture (in this case, the Texture of the Mesh Renderer)

还可设置要播放视频的特定目标,包括:

VideoPlayer 组件参考

视频播放器 (Video Player) 组件
视频播放器 (Video Player) 组件
属性 功能
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… Navigate your local file system and open URLs that begin with file://.
Update Mode Set the clock source that the Video Player component uses to update its timing.
DSP Time Select to use the same clock source that processes audio.
Game Time Select to use the same clock source as the game clock. This clock source is affected by the time scaling and capture frame rate settings.
Unscaled Game Time Select to use the same clock source as the game clock but without being affected by time scaling or capture frame rate.
Play On Awake Select to play the video when the Scene launches. Clear it if you want to trigger the video playback at another point during run time. Trigger it via scripting with the Play() command.
Wait For First Frame Select to wait for the first frame of the source video to be ready for display before the game starts. Clear it to keep the video time in sync with the rest of the game, which might cause the first few frames to be discarded.
Loop Select to make the Video Player component loop the source video when it reaches its end. Clear it to stop playing the video when it reaches the end.
Skip On Drop When you enable this option, and the Video Player component detects drift between the playback position and the game clock, the Video Player skips ahead. When you disable this option, the VideoPlayer does not attempt to correct for drift and systematically plays all frames.
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 时,使用与视频播放器组件位于同一游戏对象上的__渲染器。 | ||| Auto-Select Property__ When you enable this option, the Video Player component selects the Renderer’s main texture automatically. When you disable this option, you can set the Material Property option manually.
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 视频中的音频轨道数量。

仅在 SourceURL 时显示。SourceVideo Clip 时,通过检查视频文件来确定轨道数。
Track Enabled 勾选相关复选框进行启用后,关联的音频轨道将用于播放。必须在播放前设置此项。

复选框左侧的文本提供有关音频轨道的信息,具体而言就是音频轨道编号、语言和通道数。

例如,在以上截屏中,文本为 Track 0 [und.1 ch]。这表示它是第一个音频轨道 (Track 0),语言未定义 (und.),并且该音频轨道有一个声道 (1 ch),表示它是单声道音频轨道。

当源为 URL 时,此信息仅在播放期间可用。

仅当源是具有一个或多个音频轨道的视频剪辑或源为 URL(允许您指示在播放期间预计来自 URL 的音频轨道数)时,才显示此属性。
Audio Source 用于播放音频轨道的音频源。目标音频源也可以播放音频剪辑。

音频源的播放控件(脚本 API 中的 Play On AwakePlay())不适用于视频源的音频轨道。

仅当 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 中的新功能

VideoPlayer

视频概述
从 MovieTexture 迁移到 VideoPlayer