Unity發佈WebGL爬坑雜記(五)

Unity發佈WebGL必然會與Web端有通信,也就意味着要與js腳本有互相調用,這方面Unity官方文檔中有相關資料https://docs.unity3d.com/2018.3/Documentation/Manual/webgl-interactingwithbrowserscripting.html

與瀏覽器之間的通信分兩部分,一是Unity腳本調用js腳本函數,二是js腳本調用Unity腳本函數。

在準備通信之前要將js源添加在Unity項目中,然後再從腳本調用js函數,換句話講就是在Unity項目中聲明一個表示js腳本的.jslib的文件,然後在腳本中調用。

.jslib

mergeInto(LibraryManager.library,

{
    Hello:function()
    {
    window.alert("Hello,world!");
    },

    AddNumbers:function(x,y)
    {
    return x+y ;
    },

});

詳細解析一下這個.jslib文件,首先mergeInto是固定的,官方文檔中沒有詳細介紹,這裏我的理解這個是合併函數,表示將js函數與庫合併以備後續調用。Hello是在Unity中聲明,在這裏實現的一個函數名,將其引入 { }裏放相關操作,多個函數的話使用就用,分割,另外 在這裏解析string類型的值時要使用Pointer_stringify(str)解析爲Unity可使用的string類型值。

Unity調用JS腳本

[DllImport("__Internal")]
private static extern void Hello();
[DllImport("__Internal")]
private static extern int AddNumber(int x, int y);

void Start(){
    Hello();
    AddNumber(10,20);
}

首先引用庫__Internal,這個是兩個下劃線,函數名要和之前的.jslib命名一致,然後就是正常的函數調用了,這裏有個extern關鍵字  之前有做過對外通信的應該都知道這個關鍵字  就是爲了聲明一個在外部實現的方法,表示這個方法定義在這裏,實現在外部,使用這個關鍵字的函數必須要聲明爲靜態static的,其他沒什麼好說的了,更詳細的傳值以及值轉換在官方的文檔中有詳細介紹。

JS調用Unity腳本

SendMessage("GameObjectName","FunctionName",value);

很簡單就是這個  SendMessage函數  三個參數,第一個表示掛載目標腳本的物體名稱,第二個表示要調用的函數,第三個表示傳值,這裏傳值只能傳一個  傳多個的話就八仙過海各顯神通了,用json什麼的都OK的 。

最後官方還有個Unity 調用C的方法,可以去官網看看。

Over!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章