UGUI長押しとクリック同期
長押しとクリックで実現:
まずUGUIのいくつかのインタフェースを見てみましょう.
using UnityEngine.EventSystems; リスニングイベントのネーミングスペース
OK、次はこのいくつかのインタフェースを使用して私たちの問題を解決します.
简単な问题の说明:长押しして编集可能な状态を表示して、単机は编集可能な状态を终えて、、、、この2つの机能は単一に実现するのは难しくなくて、、、しかし一绪に使って、半日やっと出して、分かち合って、后で使うのに便利で、、、
ps:モバイル端末(Android)私も前に実現しました.https://blog.csdn.net/Czhenya/article/details/78237265
コードは次のとおりです.
まず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;
}
}
}