2011年10月07日

[Unity] JavaScriptとC#間のアクセス

UnityではJavaScriptとC#が扱えるのですが、
その言語間でデータのやりとりをしたい場合があります。

非常にわかりやすい例がありました。
http://www.41post.com/1935/programming/unity3d-js-cs-or-cs-js-access

この例は変数を受け取っていたのですが、メソッド呼び出しもいけるようです。
以下は、メソッドを付け加えた例です。
myJS.js
-----------------------------------
public var message : String = "myJS is called";
public function showMessage() {
print("showMessage(myJS.js) is called.");
}
-----------------------------------

myCS.cs
-----------------------------------
using UnityEngine;
using System.Collections;
public class myCS : MonoBehaviour
{
public string message = "myCS is called";
public void showMessage(){
print("showMessage(myCS.cs) is called.");
}
}
-----------------------------------
参照元ページでも注意がありますが、
上記2ファイルは「Standard Assets」または「Plugins」フォルダ配下に置く必要があります。

あとは、各々を呼び出すスクリプトを用意すれば完了です。
下の例では、変数やメソッドにアクセスして、コンソール画面と画面にラベル表示しています。
CallCSCode.js(C#内のものを呼び出す)
-----------------------------------
private var csScript : myCS;
function Awake () {
// Standard Assets にあるC#を読み込む
csScript = this.GetComponent("myCS");
// メソッドを呼ぶ
csScript.showMessage();
}
function OnGUI() {
GUI.Label(new Rect(10,10,300,20), csScript.message);
}
-----------------------------------


CallJSCode.cs(JavaScript内のものを呼び出す)
-----------------------------------
using UnityEngine;
using System.Collections;
public class CallJSCode : MonoBehaviour
{
private myJS jsScript;
void Awake () {
// JSを読み込む
jsScript = this.GetComponent();
// メソッドを呼ぶ
jsScript.showMessage();
}
void OnGUI() {
GUI.Label(new Rect(10,100,300,20), jsScript.message);
}
}
-----------------------------------
Androidのネイティブ機能を使うとき、
今私が知っている方法だと Java→C# とデータが渡ります。
さらに、JavaScriptでも使いたいときがあったので、上記の方法を使っています。

実際の画面と上記のプロジェクトがあります↓
http://be-style.jpn.com/unity/20111007
posted by be-style at 01:35| Comment(0) | Unity
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]