unity 发布webGL 报错总结

前提:之前发布webGL比较少,零零碎碎的,遇到的问题也没及时记录,后面遇到又是有点印象但忘了怎么解决,苦恼~遂特此记录,方便自己,有问题或表述有误欢迎评论区指出

一:不能用unity自带的字体,会直接不显示,替换为第三方字体即可

二:本地访问打包出来的index.html,修改浏览器权限

   火狐:1. 地址栏输入about:config

              2. 搜索webgl.force.enabled,属性修改为true

              3.搜索 security.fileuri.strict_origin_policy ,双击设置为false,允许加载本地资源。

              4.重启浏览器,再双击index.html打开就行

  谷歌:地址栏输入地址栏输入chrome://flags/

             1.搜索webGL , 把找到的结果的状态由Disabled 改成Enabled

             2.重启浏览器,再双击index.html打开就行

三:由于webGL安全限制及环境差异,不能直接访问IO,报错如下,解决方法同第四条,使用UnityWebRequest访问并读取资源

四:加载读取本地资源

不能直接使用Application.streamingAssetsPath访问本地资源,会找不到资源,可使用UnityWebRequest,下面是一个简单的例子

#if UNITY_WEBGL
        //路径拼接
        var serverConfig = new System.Uri(Path.Combine(
            Application.streamingAssetsPath + @"/json", "EquipmentDataList.json")); 
        UnityWebRequestMgr.Instance.GetText(serverConfig.ToString(), (temp) =>
        {
            if (!String.IsNullOrWhiteSpace(temp))
            { 
                  Debug.Log("加载配置文件内容是:"+temp);
            }
            else
            {
                Debug.Log("加载配置文件错误");
            }
        });

#elif UNITY_STANDALONE_WIN || UNITY_EDITOR
      string str=Main.Instance.m_base.JsonLoad(Application.streamingAssetsPath + "/json/EquipmentDataList.json");
       if (string.IsNullOrEmpty(str)) { return; }
         Define.equipmentDataList = JsonConvert.DeserializeObject<Dictionary<string, Define.Equipment>>(str);
           InitModelData();
#endif

五:数据序列化

不能直接使用JsonConvert.SerializeObject(Newtonsoft.Json插件)进行序列号,只能使用unity自带的JsonUtility或插件LitJson(这个先导入插件,再具体去使用),使用方法如下

 JsonMapper.ToJson(T);//T代表泛型对象
 JsonMapper.ToObject<T>(str);//T代表泛型对象,str代表字符串

六:保存与加载数据

同第三条不能直接访问IO,所以保存与加载数据可用PlayerPrefs,是用键值对的方式存储数据,具体用法如下

/// <summary>
    /// 保存数据
    /// </summary>
    /// <param name="key"></param>
    /// <param name="value"></param>
    public void SaveData(string key, string value)
    {

        PlayerPrefs.SetString(key, value); // 使用 PlayerPrefs 作为缓存
        PlayerPrefs.Save(); // 保存 PlayerPrefs 到 LocalStorage
    }
    /// <summary>
    /// 加载数据
    /// </summary>
    /// <param name="key"></param>
    /// <returns></returns>
    public string LoadData(string key)
    {
        return PlayerPrefs.GetString(key);
    }

七:不能直接打开本地文件夹选择文件并解析使用,报错如下

这里插播讲一下unity 发布webGL,网页与unity通信交互,

unity 发布webGL 网页之间的通信-CSDN博客

八:抗锯齿问题

1.可以试试Project Settings->Quality->Anti Aliasing 选择8x Multi Sampling, 

2.使用PostProcessing后处理插件或其他同类型插件处理

 九:调试

勾选ProjectSettings->Player->Publishing Setting->Enable Exceptions为Explicitly Thrown Exceptions Only,不然在浏览器控制台就看不到debug了,最后正式上线去掉即可

暂时想到这么多,希望对你们有帮助,后续会继续补充,有问题评论区留言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值