Version: 2020.3
言語: 日本語
イベントシステム
入力モジュール

メッセージシステム

新しい 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 関数の他の型をカバーしています。

イベントシステム
入力モジュール