Unity UGUIのEventSystem(イベントシステム)コンポーネントの紹介と使い方

Unity UGUIのEventSystem(イベントシステム)コンポーネントの紹介と使い方

1. EventSystem コンポーネントとは何ですか?

EventSystem は Unity UGUI の重要なコンポーネントであり、クリック、ドラッグ、スクロールなどのユーザー入力イベントを処理するために使用されます。ユーザー入力イベントを適切な UI 要素に渡し、対応するイベント コールバック関数をトリガーする役割を果たします。

2. EventSystem コンポーネントの仕組み

EventSystem コンポーネントは、光線検出を使用してユーザー入力イベントが発生する場所を特定し、そのイベントを最も適切な UI 要素に配信します。UI要素の階層関係と光線検出の結果に基づいて、イベントの対象オブジェクトを決定します。

3. EventSystem コンポーネントの共通プロパティ

  • firstSelectedGameObject: デフォルトで選択されている UI 要素を設定します。
  • sendNavigationEvents: ナビゲーション イベントを送信するかどうか。
  • pixelDragThreshold: ドラッグ イベントのピクセルしきい値。
  • currentInputModule: 現在使用されている入力モジュール。

4. EventSystem コンポーネントのよく使用される機能

  • SetSelectedGameObject(GameObject selected): 現在選択されている UI 要素を設定します。
  • RaycastAll(PointerEventData eventData, List<RaycastResult> resultAppendList): 光線検出を実行し、結果を指定されたリストに保存します。
  • UpdateModules(): 入力モジュールを更新します。

5. 完全なサンプルコード

例 1: デフォルトで選択されているボタンを設定する

using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;

public class DefaultButton : MonoBehaviour
{
    public Button defaultButton;

    void Start()
    {
        EventSystem.current.SetSelectedGameObject(defaultButton.gameObject);
    }
}

手順:

  1. 空のオブジェクトを作成し、それに DefaultButton スクリプトをアタッチします。
  2. 「インスペクター」パネルで、デフォルトで選択する必要があるボタンをdefaultButton変数に割り当てます。

例 2: ボタンをクリックしてイベントをトリガーする

using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;

public class ButtonClick : MonoBehaviour, IPointerClickHandler
{
    public void OnPointerClick(PointerEventData eventData)
    {
        Debug.Log("Button clicked!");
    }
}

手順:

  1. ボタンを作成し、ButtonClick スクリプトをそれにアタッチします。
  2. ButtonClick スクリプトに関数を実装しOnPointerClick、関数内で実行する必要があるコードを追加します。

例 3: オブジェクトのドラッグ

using UnityEngine;
using UnityEngine.EventSystems;

public class DragObject : MonoBehaviour, IDragHandler
{
    public void OnDrag(PointerEventData eventData)
    {
        transform.position = eventData.position;
    }
}

手順:

  1. オブジェクトを作成し、それに DragObject スクリプトをアタッチします。
  2. DragObject スクリプトに関数を実装しOnDrag、関数内のオブジェクトの位置を変更します。

例 4: スクロールリスト

using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;

public class ScrollList : MonoBehaviour, IScrollHandler
{
    public ScrollRect scrollRect;

    public void OnScroll(PointerEventData eventData)
    {
        scrollRect.verticalNormalizedPosition += eventData.scrollDelta.y * 0.1f;
    }
}

手順:

  1. スクロール リストを作成し、それに ScrollList スクリプトを添付します。
  2. ScrollList スクリプトに関数を実装しOnScroll、関数内のスクロール リストの位置を変更します。

例 5: ボタンのナビゲーション

using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;

public class Navigation : MonoBehaviour, ISelectHandler
{
    public Button nextButton;

    public void OnSelect(BaseEventData eventData)
    {
        EventSystem.current.SetSelectedGameObject(nextButton.gameObject);
    }
}

手順:

  1. 複数のボタンを作成し、それらにナビゲーション スクリプトをアタッチします。
  2. ナビゲーション スクリプトに関数を実装しOnSelect、次に選択されたボタンを関数に設定します。

予防

  • EventSystem コンポーネントは 1 つだけ存在でき、複数の EventSystem があると入力イベントが正常に処理されなくなります。
  • EventSystem コンポーネントは、Button、ScrollRect などの他の UI コンポーネントと組み合わせて使用​​する必要があります。

参考文献

おすすめ

転載: blog.csdn.net/alianhome/article/details/131906274