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 件のコメント:
コメントを投稿