UGUI長押しとクリック同期


長押しとクリックで実現:
まずUGUIのいくつかのインタフェースを見てみましょう.
using UnityEngine.EventSystems; リスニングイベントのネーミングスペース
	1)IPointerEnterHandler - OnPointerEnter -         
   		   public void  OnPointerEnter(PointerEventData eventData);
      
      2)IPointerExitHandler - OnPointerExit -             
     		public void OnPointerExit(PointerEventData eventData);
      
      3)IPointerDownHandler - OnPointerDown -            
      		 public voidOnPointerDown(PointerEventData eventData);
      
      4)IPointerUpHandler - OnPointerUp  -    (  )  
           (                     ,                   )
           public void OnPointerUp(PointerEventData eventData);
      
      5)IPointerClickHandler - OnPointerClick -            (    )
           public void OnPointerClick(PointerEventData eventData);
      
      6)IInitializePotentialDragHandler - OnInitializePotentialDrag -       
            IPointerDownHandler   ,      
           public void OnInitializePotentialDrag(PointerEventData eventData);
      
      7)IBeginDragHandler - OnBeginDrag -       
           public void OnBeginDrag(PointerEventData eventData);
      
      8)IDragHandler - OnDrag -      
           public void OnDrag(PointerEventData eventData);
      
      9)IEndDragHandler - OnEndDrag -     (        )
           public void OnEndDrag(PointerEventData eventData);
      
      10)IDropHandler - OnDrop -     (        (     )     ,       )
            public void OnDrop(PointerEventData eventData);
      
      11)IScrollHandler - OnScroll -       
            public void OnScroll(PointerEventData eventData);
      
      12)IUpdateSelectedHandler - OnUpdateSelected -           
            public void OnUpdateSelected(BaseEventData eventData);
      
      13)ISelectHandler - OnSelect -      
    		 (EventSystem.current.SetSelectedGameObject(gameObject))
            public void OnSelect(BaseEventData eventData);
      
      14)IDeselectHandler - OnDeselect -      
            public void OnDeselect(BaseEventData eventData);
      
      15)IMoveHandler - OnMove -      
            ( InputManager  Horizontal Vertica     ),          
            public void OnMove(AxisEventData eventData);
      
      16)ISubmitHandler - OnSubmit -          
    	  ( InputManager  Submit     ,PC     Enter ),         
           public void OnSubmit(BaseEventData eventData);
      
      17)ICancelHandler - OnCancel -        
   			( InputManager  Cancel     ,PC     Esc ),          
            public void OnCancel(BaseEventData eventData);

OK、次はこのいくつかのインタフェースを使用して私たちの問題を解決します.
简単な问题の说明:长押しして编集可能な状态を表示して、単机は编集可能な状态を终えて、、、、この2つの机能は単一に実现するのは难しくなくて、、、しかし一绪に使って、半日やっと出して、分かち合って、后で使うのに便利で、、、
ps:モバイル端末(Android)私も前に実現しました.https://blog.csdn.net/Czhenya/article/details/78237265
コードは次のとおりです.using UnityEngine; using UnityEngine.Events; using UnityEngine.EventSystems; /// /// , /// public class ButtonLongPress : UIBehaviour, IPointerDownHandler, IPointerUpHandler, IPointerExitHandler, IPointerClickHandler { [Tooltip(" ")] public float duration = 1.0f; public UnityEvent onLongPress = new UnityEvent(); public UnityEvent onClick = new UnityEvent(); private bool isDown = false; private bool longPress = false; private float touchTime; private void Update() { if (isDown && !longPress) { if (Time.time - touchTime > duration ) { longPress = true; // LongPress(); } } } public void OnPointerDown(PointerEventData eventData) // { touchTime = Time.time; isDown = true; longPress = false; } public void OnPointerUp(PointerEventData eventData) // { isDown = false; } public void OnPointerExit(PointerEventData eventData) // { isDown = false; } // , ,,, ... public void OnPointerClick(PointerEventData eventData) { if (!longPress) { PressDowm(); } } /// /// /// private void LongPress() // todo... , { for (int i = 0; i < 6; i++) { this.transform.parent.GetChild(3).GetChild(4).GetChild(1).GetChild(i).GetChild(0).gameObject.SetActive(true); //this.transform.GetComponent().enabled = true; this.transform.parent.GetChild(3).GetChild(4).GetChild(1).GetChild(i).GetComponent<LobbyImgYoYo>().enabled = true; } } /// /// /// private void PressDowm() { for (int i = 0; i < 6; i++) { this.transform.parent.GetChild(3).GetChild(4).GetChild(1).GetChild(i).GetChild(0).gameObject.SetActive(false); this.transform.parent.GetChild(3).GetChild(4).GetChild(1).GetChild(i).GetComponent<LobbyImgYoYo>().enabled = false; } } }