前言:前段时间的会议终于完了,真是把我折腾的够呛。领导要在会上展示一个二维码,扫描出来需要在微信端浏览器输入个人信息,输入完成后进入教育实验,然后上传分数到服务器。这个项目有一个知识点,需要Unity打出的webgl文件夹里的一个html文件需要获取之前网页传过来的一个数据,然后将这个数据传到Unity工程中,最后工程逻辑跑完后将这个id和分数一起上传的服务器。经过研究和实验,我终于完成了这个功能,不容易啊,现在在此记录一下。
1.首先在Unity中的脚本中写入调用html方法,主要是ToCntence和GetInformation方法,提前定义好html里的方法名。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
namespace CallUrl
{
public class TestCommoution : MonoBehaviour
{
#region 参数
//测试Text
public Text text0;
//游戏控制类
public ThisGameManager thisGameManager;
#endregion
#region 常规方法
void Start()
{
ToCntence();
StartCoroutine(ToSendString0());
}
#endregion
#region 函数
/// <summary>
/// PassInformation是html的Function方法
/// </summary>
internal void ToCntence()
{
//PassInformation是html的Function方法
Application.ExternalCall("PassInformation");
}
private void GetInformation(string s)
{
text0.text = s;
}
/// <summary>
/// 接受id
/// </summary>
void ToSendString()
{
thisGameManager.peopleNumber = text0.text;
}
IEnumerator ToSendString0()
{
yield return new WaitForSeconds(1.0f);
ToSendString();
}
#endregion
}
}
2.将项目打成webgl包,打开其中的index.html文件,添加PassInformation方法如下。
<!DOCTYPE html>
<html lang="en-us">
<head>
<meta charset="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Unity WebGL Player | OneInstruct1</title>
<link rel="shortcut icon" href="TemplateData/favicon.ico">
<link rel="stylesheet" href="TemplateData/style.css">
<script src="TemplateData/UnityProgress.js"></script>
<script src="Build/UnityLoader.js"></script>
<script>
var gameInstance = UnityLoader.instantiate("gameContainer", "Build/WebTest2019-9-21-du-5.json", {onProgress: UnityProgress});
function GetQueryString(name)
{
var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
var r = window.location.search.substr(1).match(reg);//search,查询?后面的参数,并匹配正则
if(r!=null)
return unescape(r[2]);
return null;
}
function PassInformation()//承接Unity
{
var str = GetQueryString("id");
gameInstance.SendMessage("Main Camera", "GetInformation", str);
//参数分别是:Unity里面挂载脚本的gameobject,要触发的脚本里面的方法,脚本方法括号里面的参数
}
function Reset()
{
var canvas = document.getElementById("#canvas");
canvas.height= document.documentElement.clientHeight;
canvas.width = document.documentElement.clientWidth;
}
</script>
</head>
<body onload = "Reset()" onresize = "Reset()">
<div class="webgl-content" style="width:100%;height:100%">
<div id="gameContainer" style="width: 100%; height: 100%"></div>
</div>
</div>
</body>
</html>
3.至此,Unity调用打出的webgl包中的html中的方法就完成了,比较简单易学,但是作用却很大。