先說個題外的
ajax遇到跨域問題(我用jquery)html
$.ajax({ url:url, dataType:"jsonp", type:"GET", success:function(msg) { //...... } });
要用jsonp和get
在ajax請求後得到的數據,用JSON.parse來轉換json,若是報錯了,那有多是傳過來的數據裏有非法字符,好比中文符號之之類的jquery
再次總結一下Unity WebGL下C#與JS交互一些基本web
1、從頁面上用js調取Unity中的方法ajax
gameInstance.SendMessage("GameObjectName", "FunctionName", param);
要調用Unity場景中的某個方法就要知道這個方法所在腳本掛在哪一個物體上,須要這個物體的名字,也就是第一個參數GameObjectName,而後FunctionName就是這個方法的方法名,最後是傳的參數json
我試過真接用ajax,success接收到的數據直接做爲第三個參數傳,會報錯,說不能傳這個類型的,而這個類型應該是js裏的objectcanvas
$.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);
這樣才成功瀏覽器
2、Unity中調取js中的方法ide
Application.ExternalCall("JSFunctionName", params[]);
雖然在新版本的Unity中(具體從哪一個版本開始沒注意)
Application.ExternalCall就棄用了,但我仍是習慣用這個,反正也能運行
而新的jslib的方式,以前也試過,用不慣……函數
3、讓Unity發佈出的程序隨頁面縮放,即自適應
發佈出來的WebGL程序有一個index.html,在裏面加些東西,改些東西就好了
<script> var gameInstance = UnityLoader.instantiate("gameContainer", "Build/WebStudy.json", {onProgress: UnityProgress}); </script>
上面這行是固定有的,定義了gameInstace
在它下面再添加一個script標籤,裏面填上咱們須要的js代碼
<script> function Reset() { var canvas=document.getElementById("#canvas"); canvas.height=document.documentElement.clientHeight; canvas.width=document.documentElement.clientWidth; } </script>
也就是建了一個叫Reset的函數
這裏以canvas爲id的組件是在運行以後生成的
而這個reset方法要在運行開始時,和改變瀏覽器窗口大小時起做用
因而
<body onload="Reset()" onresize="Reset()">
而原先的主界面的div,也要改一改
<div class="webgl-content" style="width:100%;height:100%"> <div id="gameContainer" style="width:100%; height:100%">
即最外面的div里加上style,讓width和height都是100%,在其下的gameContainer中,將原先固定像素數的width和height也改爲100%。這樣所有改完以後,再運行頁面,就是佔滿整個瀏覽器窗口,並且自適應。若是不想佔滿,須要調整Reset方法裏canvas的width和height,同時也要調整gameContainer的style,並且兩邊要一至。