前提・実現したいこと
・普通にスクロールできるScrollView
・ScrollView内のアイテムを長押ししたらオブジェクト(オブジェクトAとする)を表示
・オブジェクトAが表示されている間もドラッグはできる(ポインタは常に押したまま)
・ポインタをリリースするとオブジェクトAが非表示になる
を満たすようにしたいです。
試したこと・問題点
ScrollView内なのでEventTriggerではなくEventSystemを使用しています。
まず最初にOnPointerDownとOnPointerUpのみ実装したときは長押しでオブジェクトが表示
されたときにドラッグするとOnPointerUpがよばれてしまいそのオブジェクトが非表示になってしまいました。
そこでドラッグ関係の関数を空の状態で書いたところ、
今度は普通にスクロールすることができなくなってしまいました。
該当のソースコード
以下にScrollView内のアイテムにアタッチしてあるスクリプトをのせます。
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.EventSystems; 5 6public class TimeLineCardManager : MonoBehaviour, IPointerDownHandler, IPointerUpHandler, IBeginDragHandler, IDragHandler, IEndDragHandler{ 7 8 //オブジェクト参照 9 public GameObject scheduleDetail; //長押ししたときに表示するもの 10 11 //メンバ変数 12 private bool isPointerDown = false; //ポインタが押されたかどうか 13 private float timeElapsed = 0f; //時間が蓄積される 14 15 void Update() 16 { 17 if (isPointerDown) timeElapsed += Time.deltaTime; 18 19 if (timeElapsed >= 0.5f) 20 { 21 //長押し(0.5秒以上)した時の処理 22 //Detailを表示 23 scheduleDetail.SetActive(true); 24 } 25 } 26 27 //ポインタがオブジェクト上で押されたらよばれる 28 public void OnPointerDown(PointerEventData eventData) 29 { 30 isPointerDown = true; //ポインタを押したことを伝える 31 32 } 33 34 //ポインタがリリースされたときに呼ばれる 35 public void OnPointerUp(PointerEventData eventData) 36 { 37 isPointerDown = false; 38 timeElapsed = 0.0f; 39 scheduleDetail.SetActive(false); 40 } 41 42 /*ドラッグ関連*/ 43 public void OnBeginDrag(PointerEventData eventData) 44 { 45 46 } 47 48 public void OnDrag(PointerEventData eventData) 49 { 50 51 } 52 53 public void OnEndDrag(PointerEventData eventData) 54 { 55 56 } 57} 58