2012年10月9日火曜日

Unity WIki Tips - メッセージ通知センター

たくさんの敵キャラを作成して、衝突するつどにSendMessageを使ったコーディングをしていると、後々でコードのメンテナンスが面倒になることがある。

Unity Wikiでこれを解決するNotificationCenterという良い方法があったので翻訳を紹介したい。

C#スクリプトはリンク先の一番下に直に記載されているためコピーしておくと良い。

http://wiki.unity3d.com/index.php?title=CSharpNotificationCenter



用法
これは自動でインスタンス化されるシングルトンクラス。オブジェクトにアタッチする必要はなく、プロジェクトのアセットに入れてDefaultCenterに呼び出しを行うのみ。 このstaticメソッドの呼び出しにより:ゲームオブジェクト作成、NotificationCenterコンポーネント追加、コンポーネント参照作成が自動的に行われる。

PostNotification()により通知を投稿(Post)することが出来る:
NotificationCenter.DefaultCenter.PostNotification(this, "OnBumperCollision");
NotificationCenter.DefaultCenter.PostNotification(this, "OnBumperCollision", anyObject);
NotificationCenter.DefaultCenter.PostNotification(new Notification(this, "OnBumperCollision"));
NotificationCenter.DefaultCenter.PostNotification(new Notification(this, "OnBumperCollision", anyObject));

PostNotification()メソッドは、いくつかの呼び出し方法がある。 必須のパラメータは2つのみ(送信者、通知名)。 オプションでデータオブジェクトもパラメータとして受取りが出来るものであり、送受信されるものでさえあれば何であっても良い。 例えば、OnBumperCollision通知がCollisionに関する情報を送信しても良いし、Collisionオブジェクト自体を送ることも出来る。 多くの場合では、データオブジェクトはハッシュテーブルとして使用され、データオブジキーと一対で様々な情報を格納できるようにする。
留意点として、PostNotification()は個々のパラメータを渡すことも出来るし、Notificationオブジェクトを渡すことも出来る。 通知オブジェクトは、サブクラス化することができる(通知データのセットを作る場合など)。さらにNotificationオブジェクトは、必須のパラメータは2つのみ(送信者、通知名)でありオプションでデータオブジェクトもパラメータとして受取りが出来る。

addObserverメソッドを呼び出すことで通知を受け取るよう登録できる:
NotificationCenter.DefaultCenter.AddObserver(this, "OnBumperCollision");
DefaultCenter()は、デフォルトのNotificationCenterのインスタンスを返すstaticメソッドであり、存在しない場合は、自動でインスタンス化される。 AddObserver()通知は2つのパラメータが必要である(受信したいオブジェクト名、登録する通知名)。 登録する通知名は、イベントで実行する関数名である。

RemoveObserver()メソッドでオブザーバを削除できる:
NotificationCenter.DefaultCenter.RemoveObserver(this, "OnBumperCollision");
RemoveObserver()は指定された通知イベントのオブザーバのリストからオブジェクトを削除する。

通知を受信するには、通知名を持つメソッドを実装する:
using UnityEngine;
using System.Collections;
 
public class Test : MonoBehaviour {
 
   // Use this for initialization
   void Start ()
   {
      NotificationCenter.DefaultCenter.AddObserver(this, "OnBumperCollision");
   }
 
   void OnBumperCollision ()
   {
      // do something...
   }
}
------
実際にNotification Centerの考え方を応用したゲーム開発を推奨しているサイトはみつかった。しかし、多くのコンテンツが有料になっているため、詳細確認までは出来なかったのが残念なところだ:
http://www.digitaltutors.com/11/training.php?vid=12512&autoplay=1

色々な考え方をUnity Wikiから取り入れてゲームで有効活用しよう!

0 件のコメント:

コメントを投稿

ブックマークに追加

このエントリーをはてなブックマークに追加

自己紹介

自分の写真
Unity3D公式マニュアル翻訳やってる人がスマホ(iPhone, Android)のゲーム開発しています。気軽に面白く初心者が遊べる内容がモットー。Blogでは開発情報をひたすら、Twitterではゲーム作成の過程で参考にしている情報を中心につぶやきます

ページビューの合計

過去7日間の人気投稿

ブログ アーカイブ