はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【Unity】UniRxでEventTriggerによるタッチを制御する

はじめに

今回はUniRxでEventTriggerによるタッチを制御する方法についての記事になります!

よくユーザーからの入力としてuGUIbuttonを利用したサンプルがありますよね。

ただ私はよくEventTriggerPointerDownを使った方法を使います。

f:id:hanaaaaaachiru:20190817195952p:plain

以前普通のuGUIOnClickを用いていたら、感度が悪いとレビューで言われてしまいました。

f:id:hanaaaaaachiru:20190817200106p:plain

それからはEventTriggerを愛用しています。

またあまりEventTriggerUniRxに関するサンプルを見かけなかったので、書き残しておきたいと思います。

やり方

まずはこちらの記述を忘れずにします。

using UniRx;
using UniRx.Triggers;

最初にEventTriggerと言いましたが、UniRxで使うのは厳密にはObservableEventTriggerです。

このクラスにはIObservableに変換してくれるメソッドがあるからというわけですね。

実際に使ってみると、

using UniRx;
using UniRx.Triggers;
using UnityEngine;

public class EventTriggerTest : MonoBehaviour
{
    private void Start()
    {
        var eventTrigger = gameObject.AddComponent<ObservableEventTrigger>();

        // PointerDown
        eventTrigger.OnPointerDownAsObservable()
            .Subscribe(pointerEventData => Debug.Log(pointerEventData.position));

    }
}

これでこのスクリプトがアタッチされたゲームオブジェクトをクリックしてみると、タッチした座標が出力されているはずです。

さいごに

最近知ったのですがuGUIbuttonにもPointerDownがあるみたいです。

var button = GetComponent<Button>();
button.OnPointerDownAsObservable()
    .Subscribe(pointerEventData => Debug.Log(pointerEventData.position));

なのでどちらを使うべきかは好み次第かもしれませんね。