文档介绍
WebView for Unreal Engine
本文档说明 WebView 2.1.1 的插件能力、接入流程、Blueprint 使用方式、桥接模式和主要配置变量。
适用场景
当前最适合以下类型的项目界面。
适合常驻或弹出的游戏 UI,把 HTML 页面作为可维护的菜单界面。
适合快速迭代运营内容,用网页资源驱动活动、商店和任务页面。
适合打包本地页面,也支持远程页面在项目内统一呈现。
适合需要 UE 与网页双向通信的工具面板、交互页面和调试界面。
2.1.1 更新
WebView 2.1.1 重点改进本地页面启动稳定性、显式字体缓存和跨平台键盘输入准确性。
2.1.1,支持 UE 5.0 - 5.8。本版本保留 2.1.0 的 Windows CEF 媒体能力,并新增启动字体缓存和更准确的键盘输入 SDK。Windows 媒体支持
- 支持 H.264 视频播放,包括 H.264 编码的 MP4 文件。
- 新增 WebRTC 支持,可用于网页中的实时通信场景。
- 新版 Windows Runtime 通过下载器安装;旧 Runtime 不会自动获得 H.264 或 WebRTC 能力。
本地网页目录与自动打包
Local Web Root现在是目录选择器,支持项目内相对路径和项目外绝对路径。- 选择目录后,插件自动维护
DirectoriesToAlwaysStageAsNonUFS,无需再手动填写 Packaging Settings。 - Windows 编辑器对项目外目录使用 NTFS junction,切换目录时只更新文件系统链接,不复制网页文件;真正的复制发生在 UAT 打包阶段。
Packaged File Extensions控制项目外目录在打包时允许复制的后缀;清空数组表示不过滤。
启动字体缓存
Preload Local Fonts On Startup现在使用字体文件数组,支持在一个文件对话框中多选woff/woff2/ttf/otf/eot字体。- 所选字体必须位于当前
Local Web Root下;目录外的文件会被拒绝并提示。 - UE 启动时会在创建第一个 WebView 页面前读取配置字体到进程缓存,减少本地页面切换时的字体回退闪烁。
更准确的键盘输入 SDK
- Windows 保留原生键盘消息所需的物理按键数据,可更准确地区分小键盘、扩展键以及左右修饰键;Mac/Linux 使用 UE 平台按键事件进行统一映射。
- 网页侧可通过
WebView.setKeyboardBindingCaptureEnabled(true)开启通用按键绑定捕获,并监听WebView.on("NativeKeyDown", callback)。 - 捕获数据包含
code、key、keyCode、location、修饰键状态和repeat,便于网页实现可靠的按键绑定页面。
LocalContentRoot 会在启动时自动迁移。功能概览
插件定位是项目侧可维护的网页界面方案,而不是依赖引擎内置 WebBrowser 的黑盒包装。
- 支持本地页面、远程页面和 JS 双向通信。
- 支持在 UMG 中直接放置控件,不要求你先写自己的 Slate 包装。
- 支持反射调用、委托调用、Unreal -> JS 调用。
- 支持基础输入、拖拽测试、透明点击透传、IME 输入法链路。
- 桌面端 Win64 / Mac / Linux 使用插件管理的 CEF / Chromium Runtime;Android / iOS 使用系统原生 WebView。
- Windows CEF Runtime 从 2.1.0 开始支持 H.264 视频播放和 WebRTC。
- 主插件包不再内置完整桌面 CEF Runtime;桌面端首次使用时由插件下载器准备对应平台 Runtime。
视频预览
下面这段视频展示了插件内 index.html 示例页面的真实运行效果,包括本地页面内容、交互区块与媒体播放表现。
该视频对应插件内网页示例 Plugins/WebView/Content/WebView/Web/index.html 的实际展示内容,可用于快速判断界面风格、交互流畅度和视频播放效果。
接入方式
通常只需要把插件放进项目;桌面端 CEF Runtime 会在首次进入编辑器或首次创建 WebView 时自动检查并下载,也可以通过工具栏手动准备。
- 将插件目录放到
Plugins/WebView。 - 桌面端 Win64 / Mac / Linux 使用插件管理的 CEF Runtime;Android / iOS 使用系统原生 WebView,不在移动端打包 CEF。
- 首次使用时让插件完成 Runtime 下载;也可以从 WebView 工具栏手动下载、重试或修复当前平台 Runtime。
- Windows 推荐使用
D3D12获得更好的页面渲染性能与视频表现;D3D11保留为兼容回退。Windows 的 H.264 和 WebRTC 使用 2.1.1 对应的 Runtime 包。 - Android 会先把随包网页文件抽取到应用可读目录,再交给系统 WebView 加载;如果真机出现黑屏,请先检查 logcat 中的 WebView、chromium、AndroidRuntime 和 LogWebViewUserWidget 相关日志。
Project Settings -> Game -> WebView 中选择 Local Web Root 和 Local Host Name。目录字段支持项目内或项目外文件夹;选择后插件会自动同步打包设置。默认目录是 Plugins/WebView/Content/WebView/Web,默认域名是 webview.local。如何使用
你可以直接在 UMG 中使用包装控件,也可以继承底层用户控件做更细的扩展。
方式 A:直接拖入 UMG
在 UMG 中使用 UWebViewWidget。适合大多数项目快速接入。
方式 B:继承底层控件
继承 UWebViewUserWidget 以自定义事件处理、桥接回复和页面行为,也可以在内容浏览器中右键,进入“用户界面”菜单创建 WebViewUserWidget。
Plugins/WebView/Content/WebView 下的资源,并进入 Demo 关卡查看交互示例、桥接示例、视频播放和拖拽吸附测试。Plugins/WebView/Content/WebView。例如设置地址为 /index.html 时,插件会映射到本地网页目录并通过 http://webview.local/index.html 访问。拖动专用低延迟模式
为了避免普通 hover / 鼠标移动把网页动画帧率抬高到超出配置上限,插件当前把“额外加帧 + 催帧”限制为网页主动通知的拖动阶段专用优化。
- 普通鼠标移动、hover、滚轮和点击,默认按正常浏览器节奏执行,不会仅因为移动鼠标就进入高帧率模式。
- 只有网页明确告诉引擎“现在进入拖动阶段”时,插件才会启用低延迟 boost 和后续催帧。
- 示例页面
index.html已经在两个拖动区域内接好了这套逻辑,可直接作为接入参考。
// drag begin
window.WebView.send("SetDragLowLatency", {
active: true,
sources: ["free-drag"]
});
// drag end
window.WebView.send("SetDragLowLatency", {
active: false,
sources: []
});
桥接方式
当前支持三种主要调用模式。
1. 反射调用
网页侧使用 WebView.call("Foo") 或 WebView.send("Bar"),Unreal 侧分别映射到 Call_Foo 与 Send_Bar。
2. 委托调用
如果你不想直接依赖反射函数名,可以在蓝图里监听 JS 事件 与 JS 函数调用 两个委托,然后手动回复结果。
3. Unreal 调 JS
使用 CallWeb、CallWebJSON 等入口从 Unreal 调网页,网页侧通过 WebView.on(...) 注册回调。
插件配置变量说明
这部分是插件级配置,主要影响本地网页目录映射和项目打包时的资源组织方式。
对应 Project Settings -> Game -> WebView -> Local Web Root。默认值为 Plugins/WebView/Content/WebView/Web。这是目录选择器,支持项目内相对路径和项目外绝对路径。
对应 Project Settings -> Game -> WebView -> Local Host Name。默认值为 webview.local,用于把 /index.html 这类本地路径解析成可访问地址。
对应 Project Settings -> Game -> WebView -> Packaged File Extensions。项目外目录在真正打包时只复制这些后缀的文件;后缀不带点号且不区分大小写。清空数组表示不过滤。
对应 Project Settings -> Game -> WebView -> Preload Local Fonts On Startup。点击 Select Multiple Font Files... 可在一个文件窗口中一次选择多个字体文件,数组项仍可单独删除或编辑。每个文件必须位于当前 Local Web Root 下,目录外的选择会被拒绝并提示,数组为空时不预加载。桌面 CEF 会在创建首个 WebView 页面前预读这些 woff/woff2/ttf/otf/eot 文件,减少页面切换时的回退字体闪烁。Android / iOS 使用系统 WebView,其字体缓存行为由平台决定。
Content/WebView/ExternalWebRoot 加入 DirectoriesToAlwaysStageAsNonUFS。Windows 编辑器使用 junction 指向项目外目录,切换目录不会复制文件,实际打包时才会按后缀过滤并复制。桌面 CEF 的 scheme handler 还会缓存小型本地资源,并按文件大小和修改时间校验缓存是否仍然有效,大型媒体文件仍按请求读取,缓存只存在于当前进程,不会跨 UE 进程持久化。LocalContentRoot 会在启动时自动迁移到新的目录字段。通常不需要手动修改 ini,也不要同时保留插件自动条目和同一目录的重复手工条目。蓝图 API
Blueprint API
蓝图 API
以下节点覆盖 WebView User Widget 的页面控制、输入穿透、帧率设置和 JavaScript Bridge。节点预览按 Unreal Blueprint 风格渲染,便于对照蓝图实现。
重启浏览器
打开 DevTools
设置最大帧率
获取当前 FPS
允许游戏同时接收键盘输入
调用网页方法
调用网页方法 String
调用网页方法 JSON
JS 事件
JS 函数调用
回复 JS 函数 JSON
变量配置说明
变量配置说明
这些配置控制页面加载、窗口行为、渲染分辨率、帧率和输入透传。常规项目只需要设置 URL;菜单覆盖层和高频动画页面再按场景调整输入与渲染选项。
01页面加载
网页地址。支持 http(s) 远程地址、普通域名,以及 /index.html 这类本地路径。本地路径会根据 Project Settings 中的本地域名和网页根目录解析。
创建浏览器后自动打开开发者工具。只建议在编辑器调试网页时启用。
02窗口行为
把 target=_blank 和 window.open 链接直接放到当前 WebView 里打开,而不是创建新的浏览器弹窗。
允许网页创建独立弹窗。只有当你的页面确实依赖独立 popup 时才需要。
03渲染与性能
开启后由控件主动驱动浏览器同步刷新;关闭后浏览器按自身节奏刷新,通常更适合动画、视频和半透明效果。
控制浏览器实际渲染分辨率。Auto 跟随控件尺寸;Manual 使用固定宽高。
Manual 模式下的固定渲染尺寸。数值越高越清晰,也会增加浏览器渲染和纹理拷贝成本。
离屏浏览器渲染最大帧率上限。复杂网页不建议盲目拉高。
04输入透传
WebView 获得焦点后,键盘事件仍发送给浏览器,同时对 Slate 返回 Unhandled,让 Unreal 也能收到 Shift、Escape 等热键。
旧版基于透明像素/颜色采样的点击透传。该方案已标记废弃,后续版本会移除。
旧版透明点击透传的目标颜色和容差。默认以完全透明作为判断标准。
05JS Bridge 委托
网页侧调用 WebView.send(...) 时触发,参数包含方法名和 JsonObjectWrapper 数据。
网页侧调用 WebView.call(...) 时触发,除了方法名和数据外,还会提供 RequestId 用于回传结果。
第三方声明
以下为当前插件内直接使用或随插件分发的第三方内容说明。
- CEF / Chromium Runtime
来源:cef_binary_146.0.12+g6214c8e+chromium-146.0.7680.179
桌面 CEF Runtime 不再作为主插件包的一部分分发,而是通过插件下载器 / 安装器准备。安装后的 Runtime 保留LICENSE.txt与CREDITS.html,用于第三方说明。 - MDN flower video sample
文件:Plugins/WebView/Content/WebView/Web/media/flower.mp4与flower.webm
来源:MDN interactive examples 示例媒体
授权:CC0示例资源,用于演示本地视频播放能力。
已知限制
这些限制建议在文档和商店页面里直接说明。
- 桌面端支持
Win64 / Mac / Linux,移动端支持Android / iOS;移动端使用系统原生 WebView,能力边界由平台实现决定。 D3D11是 Win64 兼容回退路径,复杂页面和高分辨率场景下性能不如D3D12。- H.264 视频播放和 WebRTC 当前仅在 Windows CEF Runtime 提供。其他平台的媒体格式和实时通信能力以系统或平台 CEF 支持为准。
- 项目外网页目录在打包时会按
Packaged File Extensions过滤;需要发布其他文件类型时请显式加入后缀,或清空过滤数组。 - 视频网站兼容性不应默认承诺,尤其是依赖专有编解码器的站点。