新しい UI システムは、SendMessage を置き換えるために設計されたメッセージシステムを使用します。システムは、ただの C# です。SendMessage のいくつかの問題に対処することを目指しています。コンポーネントがメッセージングシステムからコールバックを受信が可能であることを示すために、MonoBehaviour 上で実装できるカスタムインタフェースを使用して、システムは動作します。コールされるとき、ターゲット GameObject が指定されます。コールされることになったメッセージシステムは、イベントが GameObject ヒエラルキーを通して、どれくらい伝達しなければならないのかを、カスタムメイドユーザデータに伝達するのを許可します。指定されたインターフェースを実装する GameObject のすべてのコンポーネントに、コールは発行されます。それは指定された GameObject に対して実行しなければならないか、または、子と親ににも実行する必要があります。これに加えて、メッセージングフレームワークは、与えられたメッセージングインターフェースを実装する GameObject を検索して、見つけるために、ヘルパー機能を提供します。
メッセージングシステムは汎用的で、UI システムだけでなく一般的なゲームコードにも使用するために設計されてます。カスタムメッセージングイベントを追加するのは比較的簡単です。UI システムがすべてのイベント処理のために使用するのと同じフレームワークを使用して、これらは動作します。
カスタムメッセージを定義することは比較的簡単です。UnityEngine.EventSystems ネームスペースに ‘IEventSystemHandler’ と呼ばれる基本インタフェースがあります。これから連なるものは何でも、メッセージングシステムによってイベントを受けるターゲットとなります。
public interface ICustomMessageTarget : IEventSystemHandler
{
// メッセージングシステムを通して呼び出される関数
void Message1();
void Message2();
}
いったんこのインターフェースが定義されると、MonoBehaviour によって実装できます。実行すると、この MonoBehaviour GameObject に対して、与えられたメッセージが出された場合に実行される関数を定義しています。
public class CustomMessageTarget : MonoBehaviour, ICustomMessageTarget
{
public void Message1()
{
Debug.Log ("Message 1 received");
}
public void Message2()
{
Debug.Log ("Message 2 received");
}
}
上記のスクリプトでは「メッセージを発行する必要がある」というメッセージを受けることができます。通常、発生するいくつかのゆるい連結イベントに応じて、これはあります。UI システムで、PointerEnter と PointerExit のようなアプリケーションへのユーザー入力に応じて起こすことができるいろいろな他のことのために、イベントを出します。
static helper クラスは、メッセージを送るために存在します。引数として、メッセージのためのターゲットオブジェクト、いくつかのユーザーデータ、ターゲットにしたいメッセージインタフェースの特定の機能にマッピングする関数を必要とします。
ExecuteEvents.Execute<ICustomMessageTarget>(target, null, (x,y)=>x.Message1());
このコードは、ICustomMessageTarget インターフェースを実装する GameObject のターゲット上のすべてのコンポーネントに function Message1 を実行します。ExecuteEvents クラスのスクリプトのドキュメントでは、そのような子クラスや親クラスに実行する Execute 関数の他の型をカバーしています。
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.