Project Unknown's Blog

Peojct.Unknownと言う名前で細々とアプリ開発をやってるメンバーのブログです。

Unity2d 別のGameObjectにメッセージを送る(SendMessage)

ゆう@あんのうんです。

今日は標題のUnityのオブジェクト間の情報のやり方の1つのSendMessageについてです。

概要

例えば、アクション等で、プレイヤーキャラがダメージを受けた場合、

ゲーム全体を管理しているマネージャーにその情報を送りたいという事は往々にしてあります。

その時に情報を送るやり方の1つとして、SendMessageと言う機能があります。

(iOSで言うところの、Notificationが近しいかも)

やり方

オブジェクトAから、オブジェクトBにメッセージを送る例

// オブジェクトAの処理
GameObject objectB = GameObject.FindGameObjectsWithTag ("ObjectB");
objectB.SendMessage("hogehogeMessage");
// オブジェクトBの処理
void hogehogeMessage() {
    /* 処理 */
} 

上記の用に記述することによって、オブジェクトAの然るべきタイミングで、オブジェクトBのhogehogeMessageメソッドをコールすることが出来ます。

また、引数を持たせたい場合は以下のように記述します。

// オブジェクトAの処理
GameObject objectB = GameObject.FindGameObjectsWithTag ("ObjectB");
objectB.SendMessage("hogehogeMessage", 10);
// オブジェクトBの処理
void hogehogeMessage(int arg) {
    /* 処理 */
} 

その他にも、SendMessageは単純にメッセージを送る機能ですから、同時にいくつも送信しても問題ありません。

// オブジェクトAの処理
GameObject[] objectBArray = GameObject.FindGameObjectsWithTag ("ObjectB");
foreach (var obj in objectBArray) {
    obj.SendMessage("hogehogeMessage");
}
// オブジェクトBの処理
void hogehogeMessage() {
    /* 処理 */
}