记录自己在unity wegl在网络请求以及JS和c#代码互调的坑

一.首先,打包注意事项:

①压缩方式选择Brotili,Gzip速度不如Brotili快,这是webgl上写的,毋庸置疑。我看过说Brotili快的,也看过说Gzip快的。准确的说应该是,Brotili加载快,但是打包过程比较慢,Gzip反之。还有第三种disable,这种就是不压缩文件,加载速度最快。根据需求自己选择吧。

②EnableExceptions选择FullofStacks,方便打包后在网页上F12查看Debug的消息以及报错。这点很重要,跟前端好好学了学才会使用

二.网络请求

1.我用的是新的UnitywebRequest类的方法,编辑状态下网络请求的时候是需要用到unitywebrequest.SetRequestHeader("Cookie","231314325345fsdf")这个方法去设置cookie的,没有涉及到跨域的问题。然而打包成webgl后运行到这一句代码就会报错,因为一般webgl下是不允许设置cookie的,除非是后端有setcookie的接口。通过了解又知道如果没有出现跨域的情况,cookie会在登录成功后自己在下一次网络请求中带上,所以我们把打包后的webgl放在了具体网页中,网页登录后再发送网络请求就没问题了。总之,要注意两个问题,一就是webgl不能像编辑状态下一样设置cookie,二就是webgl中cookie自己会带上不用设置。

2.后来因为想完全自主实现网络请求不借助前端网页的帮助。所以又研究了一下加密问题,我们的项目中用到的是CryptoJS的加密方式,加密方式分为对称加密和非对称加密,加密的时候主要是三个参数,一个就是需要加密的文本,一般都是JSON的string,还有就是一个密钥一个偏移量,这里面东西又多了,我只是网上找到了这种加密方式的C#方法,使用了一下。

三.js与C#通讯

在多次尝试中使用了三种C#调用JS方法的方法,一种js调用C#方法的方法。

①.Application.ExternalCall("functionname",params);简单粗暴,直接调用,但是,这个JS的方法目前我知道只能是写在打包后的index.html文件里,编辑器打开此文件,在script下写上JS方法就好。这里悄悄说一下,前端同事告诉我我这段代码自己另起一个script块写里面也可以,并且不会再加载时加载这段代码,也就能提高webgl加载速度。

②.Application.ExternalEval("js code");这个更直接,参数就是写的就是js代码的字符串。需要C#的参数也可以用字符串拼接来实现了。但是这里面有个大坑!一定要注意,如下:

记录自己在unity wegl在网络请求以及JS和c#代码互调的坑_第1张图片

这样看似没有问题,其实当你测试的时候就会发现报错提示你 45345asd is not defined

正确的做法是

记录自己在unity wegl在网络请求以及JS和c#代码互调的坑_第2张图片

体会一下区别。

③.最新的jslib方式,就是加了一个中间变量。C#调用jslib,jslib调用JS。网上例子很多可以试一下,但是同样要注意到上述问题。上述问题也会出现。

前两种方法会提示API已弃用,所以还是多用用第三种方法比较好。

④.Js调用C#方法,需要先实例化一个unity的游戏物体,具体方法就是打包后出来的index文件里Script块那一句。然后用实例化的物体使用obj.SendMessage("name","functionname",param)方法;第一个参数是挂着脚本的物体名,第二个是方法名,第三个是参数。

四.贴上一个链接,当初给我提供了很大的帮助,博主的其他文章也很不错。

https://blog.csdn.net/weixin_43149049/article/details/92639513#comments_12300285

有问题再更。

你可能感兴趣的:(c#,unity,游戏)