Jsとcs間でのデータの受け渡し

JSとCS間ではいくらstaticが神の領域といえど,変数やクラスは呼び出せません.

とはいえ.いくつかの条件で橋渡しができます.

それにはいくつかのルールがあります.

(1)特定名のフォルダを作成し,呼ばれるスクリプトはそこに入れる

特定名のフォルダとは,Standard Assetsか,Pluginsとなります.ただ,Standard Assetsは,StandardAssetsパッケージを読み込んだ際に作られるフォルダとたぶん同名なので何かと不安.そこでPluginsフォルダを作成し,呼ばれるスクリプトはそこに入れる.

(2)必ずGameObjectにアサイン

呼ぶ側のスクリプト,呼ばれる側のスクリプトともになにかのGameObject(create emptyでもOK)にアサインする必要があります.以下の呼び出す側例はthis.○○を使っているので,同じGameObjectにアサインしています.試してはいませんが,find○○を使えば別の場所にアサインしていても呼び出せるのでは?

(3)呼ぶ側のスクリプトは特定フォルダ以外で

整理が面倒でも,呼び出す側のフォルダはPluginsフォルダ以外の場所に保存してください.なんだかエラーがでます.

スクリプト例

呼ばれる側

ーこのスクリプトはPluginsフォルダに入れる

#pragma strict
var neko : int = 100;
function Start () {
}

function Update () {
}

function test(){ //sample of call method
print("neko"); //return text message
}

呼び出す側

ーこのスクリプトはPluginsフォルダ以外に保存

using UnityEngine;
using System.Collections;

public class Scriptcall : MonoBehaviour {
	private calledVar jsScript;//calledVarはjsのファイル名.これを変数の型にするって?謎
	// Use this for initialization
	void Awake () { //Awakeは初回に1回のみ呼び出される関数
		jsScript = this.GetComponent<calledVar>(); //このオブジェクトついてるコンポーネントを呼び出すというもの
	}


	void Start () {
	
		Debug.Log (jsScript.neko); //これでjsで設定したint10が見えます


	}
	// Update is called once per frame
	void Update () {
		jsScript.test ();//これでjs内のfunctionも実行できます
//		Debug.Log (jsScript.neko);
	}
}

なぞだらけですが,これで動くみたいです.