找回密码
 立即注册
查看: 224|回复: 0

unity app 转webgl 坑位

[复制链接]
发表于 2022-6-13 11:41 | 显示全部楼层 |阅读模式
最近需求是 老项目转webgl,在修改过程中遇见了一些坑
1.UnityLoader.js:4 To use dlopen, you need to use Emscripten's linking support, see https://github.com/kripken/emscripten/wiki/Linking



锁定问题:DllImport 所致,意思是不能直接使用dll问题
//举例
//会出错
[DllImport("winInet.dll ")]
private static extern bool InternetGetConnectedState(ref int Flag, int dwReserved);

//应该关闭其他平台的dll 导入
#if !UNITY_WEBGL
    [DllImport("winInet.dll ")]
        private static extern bool InternetGetConnectedState(ref int Flag, int dwReserved);
#endif

//例如 tolua webgl
#if  (UNITY_IPHONE || UNITY_WEBGL)
        public const string LUADLL = "__Internal";
#else
        public const string LUADLL = "tolua";
#endif
        /*
        ** third party library
        */
        [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]




tolua webgl

2. 多线程,子线程不工作

unity打包后 IL2cpp, 最后就是js, JavaScript不支持多线程, 网上可查
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Threading;
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour
{
    // Start is called before the first frame update
    IEnumerator Start()
    {
        yield return 0;
        Debug.Log("test....1");
        yield return 0;
        Thread test = new Thread(OnTest);
        test.Start(213);
        Debug.Log("test....2");
    }

    private void OnTest(object obj)
    {  //在编辑器、ios、Android、windows下会打印 ‘213’,但是webgl下 不会有这个打印
       Debug.Log(obj.ToString());
    }
}
webgl 输出:test....1
                    test....2
3. System.IO 操作

  webgl 其实就是网页,它是不能直接读取硬盘的,我们平时使用的同步File.ReadLines、 File.WriteAllText等等文件读写操作是不能完成的,读取文件 直接是unitywebrequest 异步操作,至于保存文件 需要后台服务.  assetbundle 也不能使用 ,下图的工作原理和File类似

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-26 16:34 , Processed in 0.066526 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表