1、Unity与JS互相调用
需要通过中间文件 .jslib进行交互
unity ———— .jslib ———— JS
首先需要新建一个后缀为jslib的中间文件,放在Assets下的Plugins文件夹里。
mergeInto(LibraryManager.library,{
//方法1
JSid: function (str) {
var strs=Pointer_stringify(str);
//这个Log方法是前端那边写的方法
MsgID(strs);
},
//方法2
JSinfo: function (str) {
var strs=Pointer_stringify(str);
//这个Log方法是前端那边写的方法
MsgInfo(strs);
},
//这里可以添加若干个方法,方法之间记得用逗号隔开,
//否则WebGL平台打包的时候会报错
});
在unity中编写对应方法,写一个名为UnityToJS的类,把上面写的方法封装起来,更方便我们直接使用单例全局调用
public class UnityToJS : MonoSingleton<UnityToJS>
{
[DllImport("__Internal")]
private static extern void JSid(string str);
[DllImport("__Internal")]
private static extern void JSinfo(string str);
public void ToJSid(string ID)
{
JSid(ID);
}
public void ToJSinfo(string info)
{
JSinfo(info);
}
}
unity使用方法,直接调用,也就是相当于调用JS的方法2也就是MsgInfo方法,我们传递的字符串当作参数传入到MsgInfo中。
if (Application.platform == RuntimePlatform.WebGLPlayer)
{
UnityToJS.Instance.ToJSinfo("我是传递的字符串信息");
}
2、WebGL的键盘输入
当webgl被嵌入到网页中时,有时需要在网页上进行数据填写,输入时发现在输入框中没有任何反应,那是因为webgl捕捉了所有的键盘输入,所以当在网页上输入或在项目中输入时要禁用或启动它的此属性。
//0,场景键盘输入
//1,网页键盘输入
,
public void JsAction(int num)
{
if (num == 0)
{
#if !UNITY_EDITOR && UNITY_WEBGL
WebGLInput.captureAllKeyboardInput = true;
Debug.Log("Js活动状态:" + false + " " + "场景活动状态:" + true);
#endif
}
else
{
#if !UNITY_EDITOR && UNITY_WEBGL
WebGLInput.captureAllKeyboardInput = false;
Debug.Log("Js活动状态:" + true + " " + "场景活动状态:" + false);
#endif
}
}
3、开启Gzip压缩
设置:在导出WebGL时,如果在Publishing Settings里选择Compression Format为Gzip压缩方式,Decompression Fallback也要勾选,如果不能解压缩打开还可以回退不用压缩打开,如果不勾选,无法解压就直接打不开也不会回退打开。
如果打开WebGL项目时,控制台打印出这个提示,则说明无法解压缩打开,所以回退不解压缩打开的项目。
在本地配置nginx服务器
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_comp_level 8;
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
gzip_vary off;
gzip_disable "MSIE [1-6]\.";location ~ .+\.unityweb$ {
add_header Content-Encoding gzip;
}
在服务器上配置
在导出的文件中,选择以下文件
xxxx.data.unityweb
xxxx.framework.js.unityweb
xxxx.wasm.unityweb给这三个文件添加Http标头,添加 Content-Encoding:gzip