Unity3D WebGL异常:RangeError:Maximum call stack size exceeded

造成该异常通常有两种原因:
1. UnityLoader路径设置问题。
2. StreamingAssets文件夹目录问题。

默认发布WebGl之后,会有一个 Index.html 文件,内容大致如下:

<!DOCTYPE html>
<html lang="en-us">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Unity WebGL Player | TestWebGl</title>
    <script src="Build/UnityLoader.js"></script>
    <script>
      var gameInstance = UnityLoader.instantiate("gameContainer", "Build/test.json");
    </script>
  </head>
  <body>
    <div id="gameContainer" style="width: 940px; height: 620px; margin: auto"></div>
  </body>
</html>

在将WebGl画布嵌入到自己的 Html 内时,需要确保UnityLoader.js 地址和 UnityLoader.instantiate 传入的路径正确。

当项目中使用了 StreamingAssets 目录时,应该保证 StreamingAsset目录始终和 index.html 在同一目录。WebGl平台加载StreamingAsset目录资源时,必须使用WWW进行加载,不能够使用File.ReadAllText(path)进行读取。

using UnityEngine;
using System;
using System.Collections;
using System.Text;

public class FileLoader:MonoBehaviour
{
    /// <summary>
    /// 从StreamingAssets加载资源
    /// Example:
    /// string file = Application.streamingAssetsPath+"/test.txt";
    /// LoadFile(file,(succsss,content)=>Debug.Log(success+"::"+content));
    /// </summary>
    /// <param name="file">文件地址</param>
    /// <param name="onLoad">回调,bool-是否加载成功,string-成功时为文件内容,失败时是错误信息</param>
    /// <returns></returns>
    public IEnumerator LoadFile(string file,Action<bool,string> onLoad)
    {   
        string contentOrErr = null;
        bool success = true;
        if (file.Contains ("://") || file.Contains (":///")) 
        {
            using (WWW www = new WWW(file))
            {
                yield return www;

                if (string.IsNullOrEmpty(www.error))
                    contentOrErr = www.text;
                else
                {
                    contentOrErr = www.error;
                    success = false;
                }
            }
        }
        else
        {
            contentOrErr = System.IO.File.ReadAllText(file,Encoding.UTF8);          
        }
        if(onLoad != null)
            onLoad(success,contentOrErr);
    }
}

猜你喜欢

转载自blog.csdn.net/salvare/article/details/80310476