Google

2011年11月3日木曜日

別のメソッド呼び出し方法

Unityには通常と違うメンバ関数(メソッド)の呼び方があります。
HogeというクラスにFuncという引数付きメソッドがある場合、通常はこう。

public class Hoge : MonoBehaviour{
void Func(int val);
}
Hoge hoge = new Hoge();
hoge.Func(100);

これをSendMessageで行うとこうなります。


Hoge hoge = new Hoge();
hoge.SendMessage("Func", 100);


リファレンスはこちら。
Component::SendMessage

見ての通りComponentなので、GameObjectでもMonoBehaviourでも使えます。
しかしこのSendMessage、引数取得等には使えません。
一方的に呼び出すプロシージャ的な扱いです。
こんな呼び出し、果たして何のためにあるかという話ですが、、、。

実際には言語の壁を超える場合に最も有効なようです。
C#とJSを混在させた場合、互いのクラスが参照できないといった現象に度々出くわします。
しかしSendMessageは弱い型付けとして動作するため、クラス定義が見つからない状態でもエラーとならず呼び出すことができます。

これはUnityをブラゲーとして動作する場合にも有効です。
HTML上で動作するJsからUnityへ値を受け渡しする際にもこれを使用したりします。
サーバ側でセッション情報等を生成しHTMLに埋め込んで、Unityが受け取って通信したい場合等は必須とも言えますね。

0 件のコメント:

コメントを投稿