Unity插件-unity-webview跨平台WebView浏览器组件
目录
一、使用介绍
二、插件介绍
三、快速入门
1. 获取项目
2. 导入到 Unity
方式一:通过 Sample 项目
方式二:通过 Package Manager(Unity 2019.4+)
3、构建打包运行
四、核心用法
1. 初始化 WebView
2. 关键配置参数
五、平台特定配置
1. Android
2. iOS
六、高级功能
1. 与 JavaScript 交互
2. 文件上传支持(Android)
七、常见问题排查
1. 白屏问题
2. 性能问题
八、构建与发布
1. Android
2. iOS
九、资源与文档
一、使用介绍
项目地址:gree/unity-webview
适用版本:Unity 5.x 或更早版本
二、插件介绍
unity-webview
是一个 Unity 插件,允许在 Unity 渲染视图上叠加原生 WebView 组件,支持:
- 平台:Android、iOS、Unity Web Player、Mac(Windows 暂不支持)
- 特性:加载网页、透明背景、文件上传、与 Unity 通信等
三、快速入门
1. 获取项目
git clone https://github.com/gree/unity-webview.git
2. 导入到 Unity
方式一:通过 Sample 项目
- 打开仓库中的
sample/Assets/Sample.unity
- 导入插件包:
- 双击
dist/unity-webview.unitypackage
自动导入 - 或通过 Unity 编辑器菜单:
Assets > Import Package > Custom Package
- 双击
方式二:通过 Package Manager(Unity 2019.4+)
在 Packages/manifest.json
中添加依赖:
{"dependencies": {"net.gree.unity-webview": "https://github.com/gree/unity-webview.git?path=/dist/package"}
}
无 Fragment 版本(推荐 iOS):
"net.gree.unity-webview": "https://github.com/gree/unity-webview.git?path=/dist/package-nofragment"
3、构建打包运行
运行实例场景,示例如下:
四、核心用法
1. 初始化 WebView
在脚本中创建 WebViewObject
并配置参数:
using UnityEngine;
using UnityEngine.SceneManagement;public class WebViewManager : MonoBehaviour
{private WebViewObject webViewObject;void Start(){// 初始化 WebViewwebViewObject = new GameObject("WebViewObject").AddComponent<WebViewObject>();// 基础配置webViewObject.Init(cb: (msg) => Debug.Log($"WebView Message: {msg}"), // JS 到 Unity 的回调err: (msg) => Debug.LogError($"WebView Error: {msg}"),started: () => Debug.Log("WebView Initialized"),timeout: 15 // 超时时间(秒));// 加载 URLwebViewObject.LoadURL("https://example.com");// 设置透明度(需在 Init 后调用)webViewObject.SetTransparent(true);}void OnDestroy(){// 销毁 WebViewDestroy(webViewObject.gameObject);}
}
2. 关键配置参数
参数 | 类型 | 默认值 | 说明 |
---|---|---|---|
enableWKWebView | bool | false | iOS 使用 WKWebView(推荐 iOS 9+) |
separated | bool | false | 是否在新窗口打开(仅限桌面平台) |
margins | RectOffset | (0,0,0,0) | 边距调整 |
transparent | bool | false | 透明背景 |
五、平台特定配置
1. Android
- 权限要求:
<!-- AndroidManifest.xml --> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
- HTTPS 与 HTTP:
- 若使用 HTTP,需在 Player Settings 中启用 Cleartext Traffic:
Edit > Project Settings > Player > Other Settings > Configuration > Allow HTTP Content Loading
- 或定义宏
UNITYWEBVIEW_ANDROID_USES_CLEARTEXT_TRAFFIC
- 若使用 HTTP,需在 Player Settings 中启用 Cleartext Traffic:
2. iOS
- ATS 兼容性:
- 确保
Info.plist
允许非安全连接(若必须使用 HTTP):<key>NSAppTransportSecurity</key> <dict><key>NSAllowsArbitraryLoads</key><true/> </dict>
- 确保
- WKWebView 替换 UIWebView:
- 使用
WebView.mm
文件替换WebViewWithUIWebView.mm
,避免 App Store 审核问题。
- 使用
六、高级功能
1. 与 JavaScript 交互
- 从 Unity 调用 JS:
webViewObject.EvaluateJS("alert('Hello from Unity!');");
- 从 JS 调用 Unity:
// 在网页中 UnityObject.sendMessage("GameObjectName", "MethodName", "参数");
2. 文件上传支持(Android)
- 需在 AndroidManifest.xml 中添加权限:
<uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.RECORD_AUDIO" />
- 运行时请求权限(Android 6.0+):
if (Permission.HasUserAuthorizedPermission(Permission.Camera)) {// 已授权 } else {Permission.RequestUserPermission(Permission.Camera); }
七、常见问题排查
1. 白屏问题
- 原因:未正确配置 HTTPS、自签名证书或权限。
- 解决:
- 确保加载 HTTPS 页面,或启用 Cleartext Traffic。
- 检查 AndroidManifest.xml 是否包含必要权限。
2. 性能问题
- 优化建议:
- 减少 WebView 内容复杂度。
- 使用
webViewObject.SetMargins(0,0,0,0)
消除黑边。 - 对于频繁交互,使用
SetMargins
调整布局减少重绘。
八、构建与发布
1. Android
- 生成
.aar
文件:cd Plugins/Android ./install.sh --development
- 将生成的
WebViewPlugin-*.aar
复制到 Unity 项目的Assets/Plugins/Android
目录。
2. iOS
- 确保 Xcode 项目设置:
Enable Bitcode: No
Other Linker Flags: -ObjC
九、资源与文档
- 官方仓库:gree/unity-webview
- DeepWiki:gree/unity-webview |深度维基 --- gree/unity-webview | DeepWiki