文档介绍
WebView for Unreal Engine
本文档说明插件能力、接入流程、蓝图使用方式、桥接模式和主要配置变量。
适用场景
当前最适合以下类型的项目界面。
适合常驻或弹出的游戏 UI,把 HTML 页面作为可维护的菜单界面。
适合快速迭代运营内容,用网页资源驱动活动、商店和任务页面。
适合打包本地页面,也支持远程页面在项目内统一呈现。
适合需要 UE 与网页双向通信的工具面板、交互页面和调试界面。
2.0.0 更新
WebView 2.0.0 补齐跨平台支持,并调整桌面 CEF Runtime 的交付方式:插件主体不再随包内置完整 CEF Runtime,而是通过下载器自动准备。
CEF Runtime 下载器
- 主插件包不再包含完整桌面 CEF Runtime,FAB 下载包体更轻,项目集成也更干净。
- 第一次进入编辑器 / 第一次创建 WebView 时会自动检查 Runtime,缺失时自动进入下载流程。
- 工具栏提供手动下载 / 安装入口,适合离线准备、重新下载、修复损坏文件或切换平台后重新准备 Runtime。
- Win64 / Mac / Linux 桌面端使用 CEF / Chromium Runtime;Android / iOS 使用系统原生 WebView,不下载 CEF。
移动端原生 WebView
- 新增 Android 原生 WebView 支持,不引入移动端 CEF。
- iOS 使用平台 WebView 路径加载插件内本地 Web 内容。
- Android 会先把随包 Web 文件抽取到应用可读目录,再交给系统 WebView 加载,避免直接 file:// 读取包内/OBB 路径导致黑屏。
- 移动端继续使用 WebView 页面与 Unreal 之间的桥接模式,适合本地 HTML UI 与轻量 Web 内容。
平台文件结构
- Android 实现在
Source/WebView/Private/Platform/Android/WebViewUserWidgetAndroid.cpp。 - iOS 实现在
Source/WebView/Private/Platform/IOS/WebViewUserWidgetIOS.mm。 - 桌面 CEF 逻辑与 Android / iOS 原生实现拆分到独立平台文件,便于后续维护和排查。
打包与版本
- 插件版本更新为 2.0.0。
- Android 构建路径适配 UE 5.0 / NDK r21,避免 C++20 标准导致的编译问题。
- 已使用 WebView 插件 Demo 地图完成 Android 打包与启动验证。
注意事项
- 桌面端首次使用时需要准备对应平台的 CEF Runtime;通常会自动检查并下载,也可以从 WebView 工具栏手动处理。
- Android 与 iOS 使用系统/平台原生 WebView,不走桌面 CEF 渲染路径。
- 如果真机仍出现黑屏,请优先提供 logcat 中的 WebView、chromium、AndroidRuntime 和 LogWebViewUserWidget 相关日志。
功能概览
插件定位是项目侧可维护的网页界面方案,而不是依赖引擎内置 WebBrowser 的黑盒包装。
- 支持本地页面、远程页面和 JS 双向通信。
- 支持在 UMG 中直接放置控件,不要求你先写自己的 Slate 包装。
- 支持反射调用、委托调用、Unreal -> JS 调用。
- 支持基础输入、拖拽测试、透明点击透传、IME 输入法链路。
- 桌面端使用 CEF / Chromium 后端,但完整 CEF Runtime 不再随主插件包内置;首次进入或首次创建 WebView 时会自动检查并下载,也可通过工具栏手动准备。
视频预览
下面这段视频展示了插件内 index.html 示例页面的真实运行效果,包括本地页面内容、交互区块与媒体播放表现。
该视频对应插件内网页示例 Plugins/WebView/Content/WebView/Web/index.html 的实际展示内容,可用于快速判断界面风格、交互流畅度和视频播放效果。
接入方式
通常只需要把插件放进项目;桌面端 CEF Runtime 会在首次进入或首次创建 WebView 时自动检查并下载,也可以通过工具栏手动准备。
- 将插件目录放到
Plugins/WebView。 - 桌面端不再要求主插件包内预置完整
Source/ThirdParty/CEF;首次进入编辑器或首次创建 WebView 时会自动检查 Runtime,缺失时自动下载并安装。 - 也可以从 WebView 工具栏手动打开下载器 / 安装器,用于离线准备、重新下载或修复 Runtime。
- Win64 推荐使用
D3D12获得更好的页面渲染性能与视频表现;D3D11保留为兼容回退。Android / iOS 使用系统原生 WebView。
Project Settings -> Game -> WebView 中调整 本地网页根目录 与 本地域名。默认目录是 Plugins/WebView/Content/WebView/Web,默认域名是 webview.local。如何使用
你可以直接在 UMG 中使用包装控件,也可以继承底层用户控件做更细的扩展。
方式 A:直接拖入 UMG
在 UMG 中使用 UWebViewWidget。适合大多数项目快速接入。
方式 B:继承底层控件
在内容浏览器右键菜单里的用户界面里选择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 -> 本地网页根目录。默认值为 Plugins/WebView/Content/WebView/Web。如果改成项目中的其他目录,例如 Doc/WebUI/dist,还需要把同一路径加入项目打包设置。
对应 Project Settings -> Game -> WebView -> 本地域名。默认值为 webview.local,用于把 /index.html 这类本地路径解析成可访问地址。
Doc/WebUI/dist,除了修改 本地网页根目录 外,还应把同一路径加入项目打包设置。若希望进入包体容器可使用 DirectoriesToAlwaysStageAsUFS,若希望以散文件形式发布可使用 DirectoriesToAlwaysStageAsNonUFS。蓝图 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示例资源,用于演示本地视频播放能力。
已知限制
这些限制建议在文档和商店页面里直接说明。
- 桌面端通过插件下载器 / 安装器准备 CEF / Chromium Runtime,支持
Win64 / Mac / Linux;Android 与 iOS 使用系统原生 WebView 路径。 D3D11是兼容回退路径,复杂页面和高分辨率场景下性能不如D3D12。- 视频网站兼容性不应默认承诺,尤其是依赖专有编解码器的站点。