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

相关文章
相关标签/搜索