ユニティEventSystem
- メッセージシステム
- 入力モジュール
- サポートされているイベント
- Raycasters
1.メッセージシステム(改善されたメッセージング・システム)
基本的には以前のSendMessageのアップグレード版として見ることができます。
使い方(公式サイトをコピー):
STEP1。IEventSystemHandlerから継承されたインターフェイスを宣言
public interface ICustomMessageTarget : IEventSystemHandler { // functions that can be called via the messaging system void Message1(); void Message2(); }
STEP2。このインタフェースを実装し、スクリプトがオブジェクトに掛け、オブジェクトはAAA想定しています
public class CustomMessageTarget : MonoBehaviour, ICustomMessageTarget
{
public void Message1() { Debug.Log ("Message 1 received"); } public void Message2() { Debug.Log ("Message 2 received"); } }
STEP3。任意に使用されるスクリプトExecuteEvents
静的クラスは、インターフェイスで定義された方法を実行するために、メッセージを送信し
//target should be AAA
ExecuteEvents.Execute<ICustomMessageTarget>(target, null, (x,y)=>x.Message1());
注 :上のオブジェクトがある場合STEP3レーンExcuteジェネリックメソッド、三つのパラメータがあり、最初のパラメータは、ゲームオブジェクトのオブジェクトが送信されたメッセージであり、唯一のIEventSystemHandler
実装クラス缶の時間は、この場合、自然オブジェクトがAAAです。
また、ノート :ExecuteEvents静的クラス他の方法があります。
## Static Functions
EventSystems.ExecuteEvents.CanHandleEvent Can the given GameObject handle the IEventSystemHandler of type T. EventSystems.ExecuteEvents.Execute Execute the event of type T : IEventSystemHandler on GameObject. EventSystems.ExecuteEvents.ExecuteHierarchy Recurse up the hierarchy calling Execute<T> until there is a GameObject that can handle the event. EventSystems.ExecuteEvents.GetEventHandler Traverse the object hierarchy starting at root, and return the GameObject which implements the event handler of type <T> EventSystems.ExecuteEvents.ValidateEventData Attempt to convert the data to type T. If conversion fails an ArgumentException is thrown.
名前は比較的簡単通訳、翻訳ではないです。そのようなものとしてEventSystems.ExecuteEvents.ExecuteHierarchy
、それは、適切なゲームオブジェクト、および実行する方法を見つけるために、再帰的です。
以前の多くよりも正直、科学のSendMessageであるためには、以前までしか検索し、階層内のダウン、そして今の目的のために探しています。
しかし....私の意見は、より多くの、のSendMessage私は、実際のプロジェクトで使用したことがないものは何もありません、この推定値は使用しません。なぜ?これを使用System.Actionと...
2.入力モジュール
戦略のこの部分は、約団結あなたは、それを扱うキーボードなど、すべての入力方法をサポートしている、それに触れるというように、balabala ...
3.サポートされているイベント(サポート入力イベント)
この部分はより重要である、団結イベントシステムは、入力イベントの以下の17種類をサポートしています
イベントインターフェース | 意味 |
---|---|
IPointerEnterHandler | ポインタが入り、 |
IPointerExitHandler | 休暇へのポインタ |
IPointerDownHandler | ポインタを押します |
IPointerUpHandler | ポインタ解除 |
IPointerClickHandler | ポインタプレスとリフト |
IInitializePotentialDragHandler | ドラッグ可能なオブジェクトが見つかりましたし、いくつかの変数を初期化するために使用されます |
IBeginDragHandler | スタートドラッグ |
IDragHandler | でドラッグ |
IEndDragHandler | 最後をドラッグ(とき) |
IDropHandler | ドラッグ終了位置(場所) |
IScrollHandler | マウスホイール |
IUpdateSelectedHandler | あなたがオブジェクトを選択すると、送信し続けます |
ISelectHandler | 選択したオブジェクトになり |
IDeselectHandler | オブジェクトが選択解除になり |
IMoveHandler | 物体の動き(上下、等) |
ISubmitHandler | 提出(提出)ボタンが押されました |
ICancelHandler | キャンセル(キャンセル)ボタンが押されました |
注:ここでの「ポインタは、」すべてのユニティ・マウス、タッチとサポートの他のタイプとすることができます
我々は最終的にはPCとモバイルエンドのコードのセットを共有できることを意味
4. Raycasters(光線がありました)
入力モードに応じて、統一の種類を決定します。これはまた別の重要なポイントです。
レイタイプ | 意味 |
---|---|
グラフィックRaycaster | UIの使い方 |
物理学2D Raycaster | そのような他のBoxCollider2Dとして使用される2Dオブジェクトコンポーネント、 |
物理学Raycaster | 図3Dは、(UI実際に使用することができる)を使用してオブジェクト |
5.練習 - 練習とテスト
レッツ・ビルド簡単なシナリオ:
- シーンの名前空間オブジェクトを追加するには
EventSystem
、追加EventSystem
のコンポーネントを、コンポーネントクリックAdd Default Input Modules
ボタンを - シーンカメラでは、追加
Physics Raycaster
のコンポーネントを - Cudeの3Dシーンを構築し、2Dの画像
- Cude画像へ次のスクリプトやドラッグ:
using UnityEngine;
using UnityEngine.EventSystems;
public class SupportedEventsTest : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler, IPointerDownHandler, IPointerUpHandler, IPointerClickHandler, IInitializePotentialDragHandler, IBeginDragHandler, IDragHandler, IEndDragHandler, IDropHandler, IScrollHandler, IUpdateSelectedHandler, ISelectHandler, IDeselectHandler, IMoveHandler, ISubmitHandler, ICancelHandler { public void OnBeginDrag(PointerEventData eventData) { Debug.Log("OnBeginDrag"); } public void OnCancel(BaseEventData eventData) { Debug.Log("OnCancel"); } public void OnDeselect(BaseEventData eventData) { Debug.Log("OnDeselect"); } public void OnDrag(PointerEventData eventData) { Debug.Log("OnDrag"); } public void OnDrop(PointerEventData eventData) { Debug.Log("OnDrop"); } public void OnEndDrag(PointerEventData eventData) { Debug.Log("OnEndDrag"); } public void OnInitializePotentialDrag(PointerEventData eventData) { Debug.Log("OnInitializePotentialDrag"); } public void OnMove(AxisEventData eventData) { Debug.Log("OnMove"); } public void OnPointerClick(PointerEventData eventData) { Debug.Log("OnPointerClick"); } public void OnPointerDown(PointerEventData eventData) { Debug.Log("OnPointerDown"); } public void OnPointerEnter(PointerEventData eventData) { Debug.Log("OnPointerEnter"); } public void OnPointerExit(PointerEventData eventData) { Debug.Log("OnPointerExit"); } public void OnPointerUp(PointerEventData eventData) { Debug.Log("OnPointerUp"); } public void OnScroll(PointerEventData eventData) { Debug.Log("OnScroll"); } public void OnSelect(BaseEventData eventData) { Debug.Log("OnSelect"); } public void OnSubmit(BaseEventData eventData) { Debug.Log("OnSubmit"); } public void OnUpdateSelected(BaseEventData eventData) { Debug.Log("OnUpdateSelected"); } }
ゲームを実行し、私たちが見ることができる、3Dと2Dオブジェクトは、我々は追加のカメラによるもので、適切なイベントシステム、あるPhysics Raycaster
コンポーネントを。あなたが交換した場合Graphic Raycaster
のキューブが応答していないこと。