作者:用户qqpgrvet8m | 来源:互联网 | 2023-09-25 12:26
方法01------------------------JS访问C#的变量-----------------------------JS脚本:importSystem.Reflection;
方法01
------------------------JS访问C#的变量-----------------------------
JS脚本:
import System.Reflection;
var ee = 0;
var ddf:GameObject;
function OnGUI ()
{
var targetController1:CompOnent= ddf.GetComponent("ctrl");
var fieldInfo: FieldInfo=targetController1.GetType().GetField("csvalue");
if(GUI.Button(Rect(100,100,100,100),"Call"))
{
ee=fieldInfo.GetValue(targetController1);
print(ee.ToString());
}
}
C#脚本:
using UnityEngine;
using System.Collections;
public class ctrl : MonoBehaviour
{
public int csvalue = 100;
void Start ()
{
}
void Update ()
{
}
}
-----------------------c#访问JS变量------------------------
c#代码:
using UnityEngine;
using System.Collections;
using System;
using System.Reflection;
public class CtoJS : MonoBehaviour {
public GameObject tt;
public String moneycount;
public String boncount;
// Use this for initialization
void Start ()
{
Component ACompOnent= tt.GetComponent("CllisionsSomeThing");
FieldInfo fieldInfo = AComponent.GetType().GetField("MC");
FieldInfo fieldInfo1 = AComponent.GetType().GetField("BomCount");
mOneycount= fieldInfo.GetValue(AComponent).ToString();
bOncount= fieldInfo1.GetValue(AComponent).ToString();
print(moneycount);
print(boncount);
}
void Update ()
{
}
}
js代码:
#pragma strict
var MC = "sdfsdfs";
var BomCount = 1000;
function Start () {
}
function Update () {
}
-------------------------------------------------------------------------------------------------
方法02
兩個文件 test1.js 和 test2.cs
test1.js
function
OnGUI()
{
if(GUI.Button(Rect(25,25,100,30),"JS Call CS" ))
{
var c = gameObject.GetComponent("test2");
c.PrintTest();
}
}
function
testPrint()
{
print("CS Call JS");
}
test2.cs
using
UnityEngine;
using
System.Collections;
public class test2: MonoBehaviour
{
void OnGUI()
{
if(GUI.Button(new Rect(25,70,100,30), "CS Call JS"))
{
test1 c = (test1)gameObject.GetComponent("test1");
c.testPrint();
}
}
void PrintTest()
{
print("JS Call CS");
}
}
這里必須要注意的是JS文件必須是在 "Standard Assets"、 "Pro Standard Assets" 和 "Plugins" 這三個目錄中的任何一個里,而CS文件不能與JS文件在一個目錄中。原因是,這三個目錄里的腳本被最先編譯,"Editor"目錄里的稍后編譯,其他的腳本最后編譯。目前Unity3D的2.5的版本似乎不支持C# 3.0,所以無法用var的關鍵字,這樣就只支持強類型,所以如果在一個目錄下則CS文件無法讀取JS里的方法,也就無法編譯通過了。而JS調用CS方法則無此限制。
具體可參考 http://unity3d.com/support/documentation/ScriptReference/index.Script_compilation_28Advanced29.html