本文代码基于一个智慧楼宇项目:
前提:(Unity应该使用尽量最新的版本,2020年的应该就行,2019年的未知‘,2018年的好像就不行了)
模式简介:
1.服务端处理楼宇发送的信息,把处理过的信息发送给前端页面,前端页面模型产生变化交互,实现从现实到模型的交互。
2.人为在浏览器端触发模型事件,该前端页面实现向服务端发送信息,服务端再处理数据,给楼宇相应硬件发送信息,实现从模型到现实的交互。
本文着重介绍Unity导出的WebGL、网页前端、服务端之间的交互,硬件由于实际情况不同,仅示范一般情况。
一、现实到模型。
1.从unity导出webgl,实现在网页端查看模型。在unity选择导出为webgl,勾选上Development Build,以便编程。(后续还要对unity中的代码进行修改,可以先不急着导出,看完再动工。)
2.导出之后会有一个文件夹,里面分别是一个html文件、Build文件夹、TemplateDate文件夹。将这三者全部都部署在服务器上。我这里用的是Tomcat,则webapp文件结构如下。
3.修改index.html的内容:可以发现html文件自带了一部分javascript代码
在集中声明变量处增加一个声明temp(1行):
var container = document.querySelector("#unity-container");
var canvas = document.querySelector("#unity-canvas");
var loadingBar = document.querySelector("#unity-loading-bar");
var progressBarFull = document.querySelector("#unity-progress-bar-full");
var fullscreenButton = document.querySelector("#unity-fullscreen-button");
var temp;//-------------------添加-------------------------
在接下来的代码中为temp赋值(添加1行):
script.onload = () => {
createUnityInstance(canvas, config, (progress) => {
progressBarFull.style.width = 100 * progress + "%";
}).then((unityInstance) => {
temp=unityInstance;//---------------添加--------------------
loadingBar.style.display = "none";
fullscreenButton.onclick = () => {
unityInstance.SetFullscreen(1);
};
}).catch((message) => {
alert(message);
});
};
从此我们就可以用temp变量由前端向unity发送信息了。
不要新建script标签,其他js代码就在这个标签内写就行(在document.body.appendChild(script)之后)。
接下来需要服务器接收到硬件数据,然后向前端主动发送信息。
4.服务器接收硬件代码(非关键,视情况编写):由于前端未实现多线程,这里是把数据都存入队列,以保安全。
public class AcceptHardWare{