Unity 3d C#和Javascript腳本互相調用 解決方案(非原創、整理資料,並通過實踐得來)

 Unity 3d C#Javascript腳本互相調用 解決方案javascript

1.背景知識java

腳本的編譯過程分四步:編輯器

. 編譯全部 」Standard AssetsPro Standard Assets」 or Plugins」 目錄下的代碼this

. 編譯全部Standard Assets/EditorPro Standard Assets/Editor」 or Plugins/Editor」 目錄下的代碼spa

. 編譯除了上面列出來的目錄和Editor目錄以外的全部代碼.net

. 編譯Editor目錄下的代碼3d

 

這樣的話,若是你但願某個Javascript能被其餘腳本引用,那麼把它放到第一組的某個目錄裏,而後把要使用它的代碼放在第三組的某個目錄裏就行了。blog

一樣,若是但願某個C#代碼能被其餘Javascript腳本引用,也必須把這個C#腳本放到第一組的某個目錄裏,Javascript代碼放到第三組的某個目錄裏。ip

 

須要注意的是,代碼一旦放在第一組目錄中,它們必定是最早被編譯的,因此它們將不可能直接引用其餘組的腳本,可是能夠經過SendMessage方式間接引用,可能會有一些效率方面的損失。這也形成了一個結果,兩個非同種語言編寫的腳本之間不能互相引用,不然沒法區分出應該讓哪一個腳本優先編譯。get

 

另一點是,第一組目錄中的腳本一旦從新編譯,會使得第三組目錄中的全部代碼也從新編譯,這將會增長總的編譯時間。因此,對於可能會常常變更的代碼,儘可能不要放到第一組目錄中去,除非它們由於被其餘腳本引用的緣由不得不放到這裏。

 

編輯器(Editor)相關的代碼編譯順序及引用規則與此相似,只不過目錄在第二組和第四組中定義。

 

 

2.C#調用javascript

using UnityEngine;
using System.Collections;


public class CS_test : MonoBehaviour {
void OnGUI(){
if(GUI.Button (new Rect(100,70,200,100),"c >> js")){
JS_test js = (JS_test)GameObject.Find ("Main Camera").GetComponent("JS_test");
string s = js.Call();
Debug.Log(s);
}
}
public string Call(){
return "from CS";
}
}

注意的問題:

此時,這個js要先被編譯,js放在Standard Assets文件夾中先編譯後被C#調用。

 

3.Javascript 調用C#

 

using UnityEngine;  

using System.Collections;  

  

public class CSMain : MonoBehaviour {  

  

      

      

    void CSTest(string test)  

    {  

        Debug.Log("CS" + test);  

    }  

      

  

}  


JS

 

function OnGUI()  

{  

    if(GUI.Button( Rect(100,100,100,50),"CS"))  

    {  

       var csTest = this.GetComponent("CSMain");  

        csTest.CSTest("fff");  

    }  

}  

  

function Test(test:String)  

{  

    Debug.Log("JS " + test);  

}  

 

注意:1.要將C#文件放在Standard Assets文件夾中先編譯後被Javascript調用。

2.將Javascript最上方的#pragma strict 刪掉。不然會報錯:(方法名)  is not a member of 'UnityEngine.Component'. 詳見http://blog.csdn.net/qqmcy/article/details/9729695

 

 

 

參考資料:http://all-ipad.net/call-javascript-function-in-c-sharp/

http://blog.csdn.net/qqmcy/article/details/9729695

相關文章
相關標籤/搜索