redhat9i 发表于 2022-2-2 21:29

untiy 转 H5 流程

这个跟多的是经验分享吧
建议先看 unity的文档:WebGL 开发入门 - Unity 手册

[*]由于 JavaScript 中缺少线程支持,因此不支持线程。在 Unity 内部使用线程来加速性能以及在脚本代码和托管的 dll 中使用线程都是不受支持的。实质上不支持System.Threading命名空间中的任何内容
[*]无法在 Visual Studio 中调试 WebGL 构建。
[*]出于安全考虑,浏览器不允许直接访问 IP 套接字来进行联网。
[*]WebGL 构建使用基于Web 音频API 的自定义音频后端。此情况下仅支持基本音频功能
[*]WebGL 是一个 AOT 平台,因此不允许使用 System.Reflection.Emit 来动态生成代码。在所有其他 IL2CPP 平台、iOS 和大多数游戏主机上都是如此。

这篇文章主要说一下我遇到的一些问题,如果其中有说得不正确的地方,希望大家指出来。

[*]不能使用 Addressables.LoadAssetAsync<T>(*),这里触发的是第一条,不支持多线程。可以使用Resource.load 代替。资源都要放在Resource目录下,还有如果加载图片不需要带图片后缀.
[*]字体的问题,如果在unity里面字体是正确的,但是在网页端字体是错误的,这里是由于字体字符不正确导致的。
   Unity默认的字体是Arial字体,在Unity发布WebGL的时候中文不能够显示,或者显示不全等。首先想到的是字体类型不对,下载一个完整的字体格式就可以了。DroidSansFallback字体下载地址:http://www.pc6.com/softview/SoftView_67216.html
如果想要确认字体是否不全,或者字体是否携带需要的字符。可以使用 Fontcreate 软件,打开字体,搜索缺失的字符是否存在。

[*]unity 转 h5 最重要的就是网页js和c#之间的调用,c#和js之间的调用。
需要在plugins文件夹下,加入*.jslib 文件,需要放在plugins的根目录下。
写法如下:





[*] c# 调用js
    根据unity的文档,应该都不难实现。只是需要特别注意 string 的处理,c#传字符传参数到js,这时候字符串会是一个number,需要调用Pointer_stringify(str)把字符串提取出来。
    如果方法返回值为string。则需要调用如下代码:
       var returnStr = "bla";
      var bufferSize = lengthBytesUTF8(returnStr) + 1;
      var buffer = _malloc(bufferSize);
      stringToUTF8(returnStr, buffer, bufferSize);
      return buffer;

[*]js调用c#
    1、新建一个c#文件 必须继承 MonoBehaviour, 假如名字为:H5ToUnity.cs
    2、在游戏场景中 添加一个gameobject(假如取名:ABC123),然后添加脚本:H5ToUnity
    3、在javascript 里面 或者在 Example.jslib 传回unity
      在javascript 里面:需要拿到unityinstance对象,然后调用。写法如下:
      unityInstance.SendMessage('ABC123', 'RewardedVideoSuccess', 10);
    在Example.jslib里面,由于会编译到 "项目名.framework.js" 中,会有一个Module变量,此时的调用写法如下:
         var SendMessage = Module["SendMessage"];
      SendMessage('ABC123', 'RewardedVideoSuccess', 10);

Unity 编译 如果找不到命名空间,可以尝试在引用里面,可以把需要的项目重新引用进来
如果遇到命名空间重复,删除本地 不需要的dll尤其是自己加的.net 库
页: [1]
查看完整版本: untiy 转 H5 流程