|
这个跟多的是经验分享吧
建议先看 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的根目录下。
写法如下:
根据unity的文档,应该都不难实现。只是需要特别注意 string 的处理,c#传字符传参数到js,这时候字符串会是一个number,需要调用Pointer_stringify(str)把字符串提取出来。
如果方法返回值为string。则需要调用如下代码:
var returnStr = &#34;bla&#34;;
var bufferSize = lengthBytesUTF8(returnStr) + 1;
var buffer = _malloc(bufferSize);
stringToUTF8(returnStr, buffer, bufferSize);
return buffer;
1、新建一个c#文件 必须继承 MonoBehaviour, 假如名字为:H5ToUnity.cs
2、在游戏场景中 添加一个gameobject(假如取名:ABC123),然后添加脚本:H5ToUnity
3、在javascript 里面 或者在 Example.jslib 传回unity
在javascript 里面:需要拿到unityinstance对象,然后调用。写法如下:
unityInstance.SendMessage(&#39;ABC123&#39;, &#39;RewardedVideoSuccess&#39;, 10);
在Example.jslib里面,由于会编译到 &#34;项目名.framework.js&#34; 中,会有一个Module变量,此时的调用写法如下:
var SendMessage = Module[&#34;SendMessage&#34;];
SendMessage(&#39;ABC123&#39;, &#39;RewardedVideoSuccess&#39;, 10);
Unity 编译 如果找不到命名空间,可以尝试在引用里面,可以把需要的项目重新引用进来
如果遇到命名空间重复,删除本地 不需要的dll 尤其是自己加的.net 库 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|