Unity_WebGL相关-创新互联

先说个题外的
ajax遇到跨域问题(我用jquery)

创新互联建站为客户提供专业的成都网站设计、网站建设、外贸网站建设、程序、域名、空间一条龙服务,提供基于WEB的系统开发. 服务项目涵盖了网页设计、网站程序开发、WEB系统开发、微信二次开发、成都做手机网站等网站方面业务。
$.ajax({
    url:url,
    dataType:"jsonp",
    type:"GET",
    success:function(msg)
    {
        //......
    }
});

要用jsonp和get
在ajax请求后获得的数据,用JSON.parse来转换json,如果报错了,那有可能是传过来的数据里有非法字符,比如中文符号之之类的

再次总结一下Unity WebGL下C#与JS交互一些基本

一、从页面上用js调取Unity中的方法

gameInstance.SendMessage("GameObjectName", "FunctionName", param);

要调用Unity场景中的某个方法就要知道这个方法所在脚本挂在哪个物体上,需要这个物体的名字,也就是第一个参数GameObjectName,然后FunctionName就是这个方法的方法名,最后是传的参数

我试过真接用ajax,success接收到的数据直接作为第三个参数传,会报错,说不能传这个类型的,而这个类型应该是js里的object

$.ajax({
    url:url,
    type:"post",
    success:function(msg)
    {
        gameInstance.SendMessage("GOName", "FName", msg);
    }
});

如上就会报错。
得到的msg应该是一个json串,但是想用之前的JSON.parse转换成json字符串也报错,不过可以把msg里的元素直接点出来,比如
msg.name,msg.id……
所以最后是手动拼的json串

var str='{"name":"'+msg.name+'","id":"'+msg.id+'"}';
gameInstance.SendMessage("GOName", "FName", str);

这样才成功

二、Unity中调取js中的方法

Application.ExternalCall("JSFunctionName", params[]);

虽然在新版本的Unity中(具体从哪个版本开始没注意)
Application.ExternalCall就弃用了,但我还是习惯用这个,反正也能运行
而新的jslib的方式,之前也试过,用不惯……

三、让Unity发布出的程序随页面缩放,即自适应
发布出来的WebGL程序有一个index.html,在里面加些东西,改些东西就行了

上面这行是固定有的,定义了gameInstace
在它下面再添加一个script标签,里面填上我们需要的js代码

也就是建了一个叫Reset的函数
这里以canvas为id的组件是在运行之后生成的

而这个reset方法要在运行开始时,和改变浏览器窗口大小时起作用
于是

而原先的主界面的div,也要改一改

即最外面的div里加上style,让width和height都是100%,
在其下的gameContainer中,将原先固定像素数的width和height也改成100%。
这样全部改完之后,再运行页面,就是占满整个浏览器窗口,而且自适应。
如果不想占满,需要调整Reset方法里canvas的width和height,同时也要调整gameContainer的style,而且两边要一至。

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


文章题目:Unity_WebGL相关-创新互联
分享URL:http://scyanting.com/article/ijjod.html