这篇只讲三件事,每件事只有几行代码:
- 在游戏里打开一个网页
- 把网页关掉
- 网页上点按钮,游戏收到消息
本文以安卓手机为例,因为它最简单。
准备工作(只做一次)
1. 安装插件
Unity 自己不会显示网页,要装一个免费插件unity-webview。
在 Unity 菜单里点:Window → Package Manager → 左上角 "+" → Add package from git URL
粘贴下面这行,点 Add:
https://github.com/gree/unity-webview.git?path=/dist/package2. 打开联网权限
Edit → Project Settings → Player → Other Settings,找到Internet Access,改成Require。
3. 记住一件事
在电脑上的 Unity 里运行,看不到网页。必须打包到安卓手机上才能看到。这是正常的,不是你做错了。
第 1 课:打开一个网页
新建脚本MyWeb.cs,复制下面的代码:
usingUnityEngine;publicclassMyWeb:MonoBehaviour{WebViewObjectweb;// 用来装网页窗口voidStart(){web=newGameObject("Web").AddComponent<WebViewObject>();// ① 造一个网页窗口web.Init();// ② 让它准备好web.SetMargins(0,0,0,0);// ③ 铺满整个屏幕web.SetVisibility(true);// ④ 显示出来web.LoadURL("https://www.baidu.com");// ⑤ 打开这个网址}}怎么用:在场景里随便建一个空物体,把这个脚本拖上去,打包到手机。
效果:游戏一打开,屏幕上就显示百度首页。
就像开电视:拿出电视 → 插电 → 摆好位置 → 打开 → 换到某个台。
第 2 课:把网页关掉
网页打开了,总得能关。关掉只需要一句:
Destroy(web.gameObject);// 把网页窗口扔掉有个小问题:Unity 的按钮会被网页挡住
网页窗口永远在最上层。如果铺满全屏,你在 Unity 里做的"关闭"按钮就被盖住了,点不到。
解决:让网页往下挪一点,把屏幕顶部空出来放按钮。
把第 1 课的第 ③ 行改成:
web.SetMargins(0,200,0,0);// 顶部空出 200 像素四个数字的意思是:左、上、右、下各空出多少。
然后在脚本里加一个关闭方法:
publicvoidCloseWeb(){Destroy(web.gameObject);}在 Unity 里做一个按钮,放在屏幕最上面,点击事件选CloseWeb,就能关掉网页了。
第 3 课:网页点按钮,游戏收到消息
这是最有用的功能。比如网页上有个"领取奖励"按钮,玩家一点,游戏就发金币。
网页这边:只要一句话
在网页的按钮里写:
<buttononclick="Unity.call('领奖')">领取奖励</button>Unity.call('领奖')的意思是:对游戏喊一声"领奖"。
游戏这边:准备一只"耳朵"
把第 1 课的web.Init();改成:
web.Init(cb:OnWebMessage);// 网页喊话时,交给 OnWebMessage 处理再加上这个方法:
voidOnWebMessage(stringmsg){if(msg=="领奖"){Debug.Log("玩家领取了 100 金币!");}}完整代码(可以直接用)
为了方便测试,这里把网页直接写在代码里,不用自己准备网站:
usingUnityEngine;publicclassMyWeb:MonoBehaviour{WebViewObjectweb;voidStart(){web=newGameObject("Web").AddComponent<WebViewObject>();web.Init(cb:OnWebMessage);// 准备好"耳朵"web.SetMargins(0,200,0,0);// 顶部留位置给关闭按钮web.SetVisibility(true);// 一个最简单的网页:两个按钮stringhtml="<h1>签到活动</h1>"+"<button style='font-size:40px' onclick=\"Unity.call('领奖')\">领取奖励</button>"+"<br><br>"+"<button style='font-size:40px' onclick=\"Unity.call('关闭')\">关闭</button>";web.LoadHTML(html,"");// 显示这个网页}// 网页喊话时,这里会收到voidOnWebMessage(stringmsg){if(msg=="领奖"){Debug.Log("玩家领取了 100 金币!");}elseif(msg=="关闭"){CloseWeb();}}publicvoidCloseWeb(){Destroy(web.gameObject);}}效果:
- 点网页上的"领取奖励" → 游戏收到"领奖",打印"领取了 100 金币"
- 点网页上的"关闭" → 网页消失
记住这几个方法就够了
| 代码 | 意思 |
|---|---|
Init(cb: 方法名) | 准备好,并指定谁来听网页说话 |
SetMargins(左, 上, 右, 下) | 设置网页的位置和大小 |
SetVisibility(true) | 显示出来 |
LoadURL("网址") | 打开一个网站 |
LoadHTML("网页内容", "") | 直接显示一段网页代码 |
Destroy(web.gameObject) | 关掉网页 |
网页里Unity.call('文字') | 网页对游戏说话 |
遇到问题先看这里
| 问题 | 怎么办 |
|---|---|
| 电脑上运行看不到网页 | 正常现象,打包到手机再看 |
| 手机上一片白 | 检查 Internet Access 是否设成了 Require;网址要用https://开头 |
| Unity 的按钮点不到 | 被网页挡住了,用SetMargins把网页往下挪 |
学会这三课,就已经能做游戏里的公告和活动页了。如果想继续学游戏把玩家名字传给网页,或者在苹果手机上使用,可以告诉我,我再接着讲。