Media Framework快速入门指南

如何使用Media Framework工具在游戏关卡中快速添加和播放视频的指南。

Windows
MacOS
Linux

MediaFrameworkHero.png

本指南结束时,您的关卡中会有一个电视在播放内容,您可以站在附近通过按键来打开或关闭电视。

目的

在Media Framework快速入门指南中,我们将介绍如何设置可以在关卡中播放视频的电视(TV)。我们还使用蓝图设置TV,这样TV上的内容可以通过按按钮来打开。我们还通过 细节(Details) 面板公开Media Framework变量,以便快速更改TV上显示的内容。如果您是刚开始接触Media Framework工具,或者想要知道如何在关卡内的静态网格体上播放视频,本指南正适合您阅读。

本指南包含一些使用材质蓝图 的设置以实现在TV上播放视频的效果。建议事先学习一些本主题的预备知识,但不是强制性要求。

目标

完成本教程后,开发者将掌握以下几点:

  • 如何导入媒体和使用不同的媒体源。

  • 如何创建包含用来播放媒体文件的媒体纹理的材质。

  • 如何使用蓝图开始和停止播放媒体。

  • 如何创建TV蓝图并在其中指定想要使用的媒体源。

1 - 项目和材质设置

  1. 使用游戏分类中的 ThirdPerson 蓝图模板创建新项目,并为其指定任意名称。

  2. 将该样本内容 提取到机器,然后将所有内容导入到引擎。

    MediaFrameworkQS_02.png

    您可以选择创建一个新文件夹来保存所有样本内容。材质 将根据纹理资源自动创建。

  3. M_TV_Inst 材质中,删除 矢量参数 节点,添加一个 纹理样本,并将 样本类型(Sample Type) 设置为 外部(External)

    MediaFrameworkQS_03.png

  4. 添加 纹理对象参数,并将其命名为 TV_Texture,然后通过 Tex 引脚连接到 纹理样本

  5. 对于 TV_Texture 参数文本对象,将 纹理 更改为新的 媒体纹理 并将其命名为 MediaPlayer_01_Video

    单击查看大图。

  6. 单击放大镜图标以浏览并打开 MediaPlayer_01_Video 资源。

    MediaFrameworkQS_04b.png

  7. 单击 媒体播放器(Media Player) 下拉菜单,并创建 媒体播放器 资源,将其命名为 MyMediaPlayer

    MediaFrameworkQS_04c.png

    创建媒体播放器(Create Media Player) 弹出菜单出现时,只需单击 确定(Ok) 即可,因为我们已经在上述步骤 5 中创建过了,因此不需要再创建一个 媒体纹理

    MediaFrameworkQS_04d.png

  8. 打开 MyMediaPlayer 资源,然后双击 Gideon_1080p_H264 文件,视频将会开始播放。

    单击查看大图。

  9. M_TV_Inst 材质中,添加 TexCoord,并将 VTiling 设置为 2.0,然后连接到 纹理样本UV 引脚。

    MediaFrameworkQS_05.png

  10. 再添加一个 TextureSample,并将 纹理(Texture) 设置为 T_TV_M2 资源。

    MediaFrameworkQS_06.png

  11. 添加一个 LinearInterpolate 节点,将上一步中的 纹理 通过 绿色 通道连接到 Alpha

    MediaFrameworkQS_07.png

  12. 如下所示连接剩余引脚。

    单击查看大图。

分段结果

我们已经设置了材质,它将使用 媒体播放器 和关联的 媒体纹理 资源播放我们的媒体。如果我们在 内容浏览器 中打开TV网格体,可能会注意到屏幕显示为黑色(某些情况下为白色)。

MediaFrameworkQS_08a.png

要预览,可以打开媒体播放器资源,双击媒体源,此时媒体将在视口中的静态网格体TV上播放。

单击查看大图。

2 - TV蓝图 - 组件设置

在该步骤中,我们创建使用TV静态网格体的蓝图,以及让TV能够在关卡中运行所需的其余组件。

  1. 内容浏览器 中,单击 新增(Add New) 按钮并选择 蓝图类(Blueprint Class)

    MediaFrameworkQS_010.png

  2. 选取父类(Pick Parent Class) 菜单中,选择 Actor 并将蓝图命名为 TV_BP

    MediaFrameworkQS_011.png

  3. TV_BP 资源中,单击 添加组件(Add Component) 按钮并选择 静态网格体(Static Mesh)

    MediaFrameworkQS_012.png

  4. 静态网格体(Static Mesh)细节(Details) 面板中,将 SM_TV 指定为要使用的 静态网格体

    MediaFrameworkQS_013.png

  5. 添加 箱体碰撞 组件,然后调节大小并将箱体移到TV前面,如下所示。

    单击查看大图。

    我们将使用箱体碰撞来指示当玩家位于TV前面时玩家可以打开TV(我们不希望站在TV后面时能够打开TV)。

  6. 添加 MediaSound 组件并在 细节(Details) 面板中为 媒体播放器(Media Player) 属性分配 MyMediaPlayer 资源。

    MediaFrameworkQS_015.png

    这将用于在 媒体播放器 中播放与定义的 媒体源 关联的音频。

  7. 箱体碰撞细节(Details) 面板中,添加 组件开始重叠时(On Component Begin Overlap)组件结束重叠时(On Component End Overlap) 事件。

    MediaFrameworkQS_016.png

分段结果

我们的TV蓝图设置妥当,接下来添加脚本功能,以便能够在站在TV旁边时通过按键来打开TV。

3 - TV蓝图 - 脚本设置

在最后一步中,我们添加脚本功能,让玩家能够按按钮来打开或关闭TV。

  1. 在TV蓝图的 事件图表 中,使用 获取玩家控制器(Get Player Controller)启用输入(Enable Input) 禁用(Disable) 输入,连接方式如下所示。

    单击查看大图。

  2. 右键单击图表,添加 P 键盘事件(或者所需的按键),将 按下(Pressed) 连接到 触发器(FlipFlop) 节点。

    MediaFrameworkQS_018.png

  3. 右键单击图表并禁用 情境关联(Context Sensitive),然后添加 打开源(Open Source) 节点。

    MediaFrameworkQS_019.png

  4. 打开源(Open Source) 节点上,右键单击 目标(Target) 引脚,选择 提升为变量(Promote to Variable) 并将其命名为 MediaPlayerforVideo

    MediaFrameworkQS_020.png

    在默认情况下,媒体播放器设置为 打开即播放(Play on Open),这样会在打开时播放媒体。

    对于禁用了 打开即播放(Play on Open) 的媒体播放器,可以使用 播放(Play) 节点,后跟 打开源(Open Source) 调用。

  5. 媒体源(Media Source) 提升为变量,将其命名为 SourceToOpen

  6. 变量(Variables) 列表中,单击两个变量上的眼睛图标,将它们设为 实例可编辑(Instance Editable) 并按如下所示进行连接。

    MediaFrameworkQS_021.png

  7. 添加 结束(Close) 节点,将其连接到 触发器(FlipFlop)B 引脚,并将 目标(Target) 设为 MediaPlayerforVideo

    MediaFrameworkQS_022.png

  8. TV_BP 拖到关卡,然后在 细节(Details) 面板中,分配 MyMediaPlayerGideon_1080p_H264 资源。

    MediaFrameworkQS_023.png

    我们将使用箱体碰撞来指示当玩家位于TV前面时玩家可以打开TV(我们不希望站在TV后面时能够打开TV)。

  9. MyMediaPlayer 资源中,启用 循环(Loop) 选项。

    MediaFrameworkQS_024.png

    这样视频开始播放后将自动循环视频,除非收到关闭指令。

  10. 单击 播放(Play) 按钮以在关卡中播放。

最终结果

在关卡中播放并接近TV时,按P按钮开始播放指定的媒体。再次按P将停止播放。

4 - 看你的了!

下面是一些额外操作,您可以使用Media Framework工具在您的项目中尝试操作:

让玩家控制TV的播放使用媒体播放列表 作为媒体源,并允许玩家"更改TV频道"。 *向拥有自己的媒体播放器、媒体声音和媒体源资源的关卡添加第二个TV蓝图。

Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback