private void Scroll(ObservableEventTrigger trigger) { trigger.OnPointerDownAsObservable() .Subscribe(data => { m_DragStartInfo.SetStartPosition(data.position); m_DragStartInfo.StartTime = Time.time; }).AddTo(gameObject); this.UpdateAsObservable() .SkipUntil(trigger.OnBeginDragAsObservable()) .TakeUntil(trigger.OnEndDragAsObservable().Do(data => { // 二本指以上でのスクロールはピンチイン・アウトの可能性があるから if (Input.touchCount < 2) { var startUv = m_DragStartInfo.StartPoint; var endUv = CalcScreenUv(data.position); m_NetworkManager.SetCommand($"5,{startUv.x},{startUv.y},{endUv.x},{endUv.y}"); if (ShowDragObservable) { Debug.Log($"Scroll: 5,{startUv.x},{startUv.y},{endUv.x},{endUv.y}"); } } })) .RepeatUntilDestroy(this) .Subscribe(_ => { if (ShowDragObservable) { Debug.Log("Scrolling..."); } }).AddTo(gameObject); }
void OnEnable() { // XXX: Consider switching to Observable{Begin,,End}DragTrigger. eventTrigger .OnBeginDragAsObservable() .TakeUntilDisable(this) .Where(eventData => eventData.pointerDrag.gameObject == this.gameObject) .Select(eventData => eventData.position) .Subscribe(position => { this.beginPosition = position; this.beginTime = DateTime.Now; }); OnDragRelative = eventTrigger .OnDragAsObservable() .TakeUntilDisable(this) .Where(eventData => eventData.pointerDrag.gameObject == this.gameObject) .Select(eventData => eventData.delta); onEndDragObservable = eventTrigger .OnEndDragAsObservable() .TakeUntilDisable(this); OnSwipeLeft = OnSwipe(MoveDirection.Left); OnSwipeRight = OnSwipe(MoveDirection.Right); OnSwipeUp = OnSwipe(MoveDirection.Up); OnSwipeDown = OnSwipe(MoveDirection.Down); }
//----- property ----- //----- method ----- void OnEnable() { eventTrigger = UnityUtility.GetOrAddComponent <ObservableEventTrigger>(gameObject); eventTrigger .OnBeginDragAsObservable() .TakeUntilDisable(this) .Where(eventData => eventData.pointerDrag.gameObject == gameObject) .Select(eventData => eventData.position) .Subscribe(position => { if (onDragStart != null) { onDragStart.OnNext(position); } }) .AddTo(this); eventTrigger .OnDragAsObservable() .TakeUntilDisable(this) .Where(eventData => eventData.pointerDrag.gameObject == gameObject) .Select(eventData => eventData.position) .Subscribe(position => { if (onDrag != null) { onDrag.OnNext(position); } }) .AddTo(this); eventTrigger .OnEndDragAsObservable() .TakeUntilDisable(this) .Where(eventData => eventData.pointerDrag.gameObject == gameObject) .Select(eventData => eventData.position) .Subscribe(position => { if (onDragEnd != null) { onDragEnd.OnNext(position); } }) .AddTo(this); }