日期:2014-05-16  浏览次数:20397 次

Unity3D --day03(js、C#互调)

网上有类似调用的例子,是这么说的:JS文件必须是在 "StandardAssets"、 "Pro StandardAssets“和 "Plugins"这三个目录中的任何一个里,而CS文件不能与JS文件在一个目录中,原因是,这三个目录里的脚本被最先编译,"Editor"目录里的稍后编译,其他的脚本最后编译。如果在一个目录下则CS文件无法读取JS里的方法,也就无法编译通过了。而JS调用CS方法则无此限制。


问题:js代码里调用C#方法

function OnGUI(){
if(GUI.Button (new Rect(100,170,200,100),"c >> js")){
var cs  = GameObject.Find("Main Camera").GetComponent("CS_test");
var s :String = cs.Call();
Debug.Log(s);
}
}
function Call() : String{
return "from js";
}

此时,C#代码必须要先被编译,就是将C#放入到Plugins文件夹中先编译出来后被js调用。


问题:c#调用js方法

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#调用。


问题:可是如果js和c#同时互相调用,就会出现矛盾,不知道哪个先编译,存在一个先编译,一个后编译的问题,这样就出现矛盾了。


http://zhaolongchn.blog.163.com/blog/static/19065850420124293495168/

Unity中C#代码和JavaScript代码互相调用(方法一)  

目前在项目中自己写的代码都用C#,但有时候从网上下载到的代码是用Javascript,如果只是绑定到GameObject上使用的倒还好,有什么修改也可以直接修改脚本代码。但有时候需要在自己写的C#代码中调用这些下载的Javascript代码时,问题出现了。