前提:之前发布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通信交互,
八:抗锯齿问题
1.可以试试Project Settings->Quality->Anti Aliasing 选择8x Multi Sampling,
2.使用PostProcessing后处理插件或其他同类型插件处理
九:调试
勾选ProjectSettings->Player->Publishing Setting->Enable Exceptions为Explicitly Thrown Exceptions Only,不然在浏览器控制台就看不到debug了,最后正式上线去掉即可
暂时想到这么多,希望对你们有帮助,后续会继续补充,有问题评论区留言