Unity WebPlayer与html通信,在html添加网页端按钮直接测试
由于现在各大浏览器的升级,UnityWebPlayer的网页方式逐渐被摒弃掉,但是很多老项目或者追求稳定的开发者还在选择使用UnityWebPlayer的方式,近期我们一个老项目的更新功能就遇到了这个问题,但网上铺天盖地的都是WebGL与html的通信帖子,就是没有webPlayer的,真是让我头疼了一阵子。经过一番努力,最后终于搞定了,在此分享给大家,也给自己做个备忘笔记。
为什么要通讯
我们项目中需要获取到服务器的登录验证信息,也就是需要服务器的Cookie信息,而WebPlayer是Unity低版本的产物,在高版本中能用的方法,如: HttpWebRequest类、UnityWebRequest类这两种方法都不能在webPlayer里使用,最终我们想到在html里面获取服务器的cookie信息,然后传到Unity前端程序中 ,进行验证使用,最终解决了这个问题,当然要传什么看你自己的需求,本文就不介绍html获取cookie值的方法了。
通信写法
WebPlayer的使用流程和方法与WebGL类似,区别是在html中获取unity对象的方法不一样。发布出来的html的结构也不一样,接下来通过具体代码进行对比一下,我就是在这个地方卡了好久。
来来来,提前看一下核心代码不一样的地方,再看完整的。
webGL获取Unity目标对象:
var gameInstance = UnityLoader.instantiate("gameContainer", "Build/SanQiaoYiSui.json", {onProgress: UnityProgress});
WebPlayer获取Unity目标对象:
var config = {
width: 960,
height: 600,
params: { enableDebugging:"0" }
};
config.params["disableContextMenu"] = true;
var u = new UnityObject2(config);
基本逻辑
1.获取unity目标实例
2.发送消息到unity目标实例的场景中
3.添加一个网页按钮,点击按钮调用函数,进行消息发送测试。
WebGL中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 | SanQiaoYiSui</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/SanQiaoYiSui.json", {onProgress: UnityProgress});
//加载入口场景成功后返回给服务器
function LoadSceneName()
{
var sceneName = "山东风之谷科技";
//MainCamera 表示在场景中脚本挂在了此物体上
//LoadSceneName 表示脚本中的函数名称
//sceneName 表示发送的数据
gameInstance.SendMessage("MainCamera", "LoadSceneName", sceneName);
alert("测试是否进行了通讯函数");
}
</script>
</head>
<body>
<div class="webgl-content">
<div id="gameContainer" style="width: 960px; height: 600px"></div>
<div class="footer">
<div class="webgl-logo"></div>
<div class="fullscreen" onclick="gameInstance.SetFullscreen(1)"></div>
//添加网页端按钮
<input type="button" value = "测试通讯" onclick = "LoadSceneName()" />
<div class="title">SanQiaoYiSui</div>
</div>
</div>
</body>
</html>
WebPlayer中html完整代码
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Unity Web Player | HTTPData</title>
<script type='text/javascript' src='https://ssl-webplayer.unity3d.com/download_webplayer-3.x/3.0/uo/jquery.min.js'></script>
<script type="text/javascript">
<!--
var unityObjectUrl = "http://webplayer.unity3d.com/download_webplayer-3.x/3.0/uo/UnityObject2.js";
if (document.location.protocol == 'https:')
unityObjectUrl = unityObjectUrl.replace("http://", "https://ssl-");
document.write('<script type="text\/javascript" src="' + unityObjectUrl + '"><\/script>');
-->
</script>
<script type="text/javascript">
<!--
var config = {
width: 960,
height: 600,
params: { enableDebugging:"0" }
};
config.params["disableContextMenu"] = true;
var u = new UnityObject2(config);
function HandshakeProtocol()
{
//alert("收到unity的消息,开始发小");
u.getUnity().SendMessage("Header","Headers","untiyddddd");
}
-->
</script>
<style type="text/css">
</style>
</head>
<body>
<p class="header"><span>Unity Web Player | </span>HTTPData</p>
<div class="content">
<div id="unityPlayer">
<div class="missing">
<a href="http://unity3d.com/webplayer/" title="Unity Web Player. Install now!">
<img alt="Unity Web Player. Install now!" src="http://webplayer.unity3d.com/installation/getunity.png" width="193" height="63" />
</a>
</div>
</div>
</div>
<p class="footer">« created with <a href="http://unity3d.com/unity/" title="Go to unity3d.com">Unity</a> »</p>
</body>