Unity WebGL开发小知识

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

猜你喜欢

转载自blog.csdn.net/m0_62921885/article/details/135667870