facebook twitter hatena line email

「Unity/UniRx/複数イベント」の版間の差分

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
(単純にトリガーをforeachで処理する場合)
(1つのObservableに複数イベントを統合して処理する場合)
行72: 行72:
 
#オブジェクトを複数(とりあえず2つ)用意して、EventTriggerをAddComponentしておく。
 
#オブジェクトを複数(とりあえず2つ)用意して、EventTriggerをAddComponentしておく。
 
#eventTriggersにトリガーとなるオブジェクトを、Inspectorから、ドラッグする
 
#eventTriggersにトリガーとなるオブジェクトを、Inspectorから、ドラッグする
 +
 +
参考:https://www.hanachiru-blog.com/entry/2018/09/21/151426

2021年10月14日 (木) 21:06時点における版

単純にトリガーをforeachで処理する場合

using UnityEngine;
using UniRx;
using UniRx.Triggers;
public class EventsAddComponentScene : MonoBehaviour
{
    void Start()
    {
        ObservableEventTriggers();
    }
    // 単純にトリガーをforeachで処理する場合
    public List<ObservableEventTrigger> observableEventTriggers;
    void ObservableEventTriggers()
    {
        foreach (var eventTrigger in observableEventTriggers) {
            eventTrigger
                .OnPointerEnterAsObservable()
                .Subscribe(pointerEventData => Debug.Log("PointerEnter " + pointerEventData.position)) // 触れた時 PointerExit (666.0, 1013.0)
                .AddTo(gameObject);
        }
    }
}
  1. オブジェクトを複数(とりあえず2つ)用意して、ObservableEventTriggerをAddComponentしておく。
  2. observableEventTriggersにトリガーとなるオブジェクトを、Inspectorから、ドラッグする

1つのObservableに複数イベントを統合して処理する場合

using UnityEngine;
using UniRx;
using UniRx.Triggers;
using System;
using UnityEngine.EventSystems;
public class EventsAddComponentScene : MonoBehaviour
{
    void Start()
    {
        OneObservableTriggers();
    }
    // 1つのObservableに複数イベントを統合して処理する場合
    public List<EventTrigger> eventTriggers;
    void OneObservableTriggers()
    {
        IObservable<Unit> triggerOnPointerEnterAsObservable;
        triggerOnPointerEnterAsObservable = Observable.Create<Unit>(observer =>
        {
            Debug.Log("eventTriggers.Count=" + eventTriggers.Count);
            foreach (var trigger in eventTriggers)
            {
                if (trigger == null) {
                    Debug.Log("trigger is null");
                }
                var pointerEnter = new EventTrigger.Entry
                {
                    eventID = EventTriggerType.PointerEnter
                };
                pointerEnter.callback.AddListener(data =>
                {
                    observer.OnNext(Unit.Default);
                });
                trigger.triggers.Add(pointerEnter);
            }
            return Disposable.Empty;
        });
        triggerOnPointerEnterAsObservable
            .Subscribe(pointerEventData => Debug.Log("PointerEnter"))
            .AddTo(gameObject);
    }
}
  1. オブジェクトを複数(とりあえず2つ)用意して、EventTriggerをAddComponentしておく。
  2. eventTriggersにトリガーとなるオブジェクトを、Inspectorから、ドラッグする

参考:https://www.hanachiru-blog.com/entry/2018/09/21/151426