当前位置:   article > 正文

Unity3D WEBGL项目注意事项_unity webgl

unity webgl
Unity打包webgl主要有以下几个方面需要注意:
1、数据库无法像PC端那样直连,需要通过后台接口对数据库进行访问,再由Unity去调用后台接口,目前我们项目用的是JAVA后台,Unity调用后台接口必须要使用 携程(IEnumerator),并通过 StartCoroutine去调用执行该携程函数, 携程(IEnumerator)与主线程是异步进行的,所以界面中有需要初始化或者显示的地方,需要将代码写在 携程(IEnumerator)数据读取完后,不然无法正常初始化数据。调用方式如下图所示。
public void OnClick()
    {
        string userName = GameObject.Find("BP2/UserName/InputField").GetComponent<InputField>().text;
        string password = GameObject.Find("BP2/Password/InputField").GetComponent<InputField>().text;
        Text text = txtError.GetComponent<Text>();
        if (string.IsNullOrEmpty(userName))
        {
            text.text = "用户名不能为空!";
            return;
        }
        else if (string.IsNullOrEmpty(password))
        {
            text.text = "请输入正确的密码!";
            return;
        }
        string json = JsonParamUtils.geUserLogin(userName, password);
        Debug.Log(json);
        StartCoroutine(login(string.Format("http://{0}/user/login",UtilsClass.WEBURL), json));
    }
    IEnumerator login(string _url, string _jsonStr)
    {
        Text text = txtError.GetComponent<Text>();
        Debug.Log(_url);
        byte[] bytes = Encoding.UTF8.GetBytes(_jsonStr);
        UnityWebRequest request = new UnityWebRequest(_url, UnityWebRequest.kHttpVerbPOST)
        {
            uploadHandler = new UploadHandlerRaw(bytes),
            downloadHandler = new DownloadHandlerBuffer()
        };
        request.SetRequestHeader("Content-Type", "application/json;charset=utf-8");
        yield return request.SendWebRequest();
        if (request.isHttpError || request.isNetworkError)
        {
            Debug.LogError(request.error);
        }
        else//200
        {
            PostValueResult postValueResult = JsonMapper.ToObject<PostValueResult>(request.downloadHandler.text);
            if (postValueResult.success)
            {
                //User userInfo = JsonMapper.ToObject<User>(postValueResult.data.ToJson());
                User userInfo = postValueResult.data;
                if (userInfo != null)
                {
                    //SceneManager.LoadSceneAsync("SampleScene");      
                    StartCoroutine(LoadLevel());
                }
                else
                {
                    text.text = "用户名或密码错误!";
                }
            }
            else
            {
                Debug.Log(postValueResult.msg);
                text.text = postValueResult.msg;
            }
        }
    }
//用户POST请求参数传递
string   geUserLogin(string userName,string passWord)
{
        JsonData jd= new JsonData();
        jd["userName"] =  userName;
        jd[" passWord"] =  passWord;
        string jsonData = JsonMapper.ToJson(jd);
        return jsonData;
}
2、Unity中Text自带默认的字体为 Arial,此字体在WEBGL中无法显示,所以需要导入其它字体进行替换,目前我们项目中用的是 微软雅黑(msyh.ttc)
3、如果项目中使用了AssetBundle,那么初始化的时候也需要使用 携程(IEnumerator)的方式去进行初始化,调用方式可继续使用PC端的单例模式。初始化代码如下。
void Start()
    {
        StartCoroutine(LoadUIAssetBundle());
        StartCoroutine(LoadObjAssetBundle());
        StartCoroutine(LoadTextureAssetBundle());
    }
    /// <summary>
    /// UI携程
    /// </summary>
    /// <returns></returns>
    IEnumerator LoadUIAssetBundle()
    {
        AssetBundleUtils.path = Application.streamingAssetsPath + "/WebGL/ui.unity3d";          
        UnityWebRequest www = UnityWebRequestAssetBundle.GetAssetBundle(AssetBundleUtils.path, 0);
        yield return www.SendWebRequest();
        if (www.isNetworkError || www.isHttpError)
        {
            Debug.LogError(www.error);
        }
        else
        {
            AssetBundleUtils.obj = DownloadHandlerAssetBundle.GetContent(www);   
        }
    }
4、Unity中的 PDFRenderer插件,无法在WEBGL中使用,通过文档可以看到是支持WEBGL,但在使用测试中,是无法再WEBGL中正常显示PDF内容的,不知道是因为我们使用阉割版的问题还是什么,正版的是需要付费购买;最终选择在WEBGL中新打开网页页签的形式查看PDF,代码如下,UtilsClass.filePath + fileName为你PDF的路径。
Application.ExternalEval("window.open('" + UtilsClass.filePath + fileName + "','_blank')");
如果文件存储在服务器,则可以通过下方的形式打开文件,url为后台给的文件访问路径
Application.OpenURL(url)
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号