using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; public class ButtonSet : MonoBehaviour { public const float buttonHoldInterval = 0.25f; public static Action OnLeft, OnRight, OnUp, OnDown; public static bool DownPressed; public static bool LeftPressed; public static bool RightPressed; public static bool UpPressed; public EventTrigger btnUp,btnLeft,btnRight,btnDown; #region Input Handle void Start(){ btnLeft.AddListener(EventTriggerType.PointerDown, OnLeftDown); btnLeft.AddListener(EventTriggerType.PointerUp, OnLeftUp); btnRight.AddListener(EventTriggerType.PointerDown, OnRightDown); btnRight.AddListener(EventTriggerType.PointerUp, OnRightUp); btnDown.AddListener(EventTriggerType.PointerDown, OnDownDown); btnDown.AddListener(EventTriggerType.PointerUp, OnDownUp); btnUp.AddListener(EventTriggerType.PointerDown, OnUpDown); btnUp.AddListener(EventTriggerType.PointerUp, OnUpUp); } void OnLeftDown(BaseEventData e){ LeftPressed=true; leftTimer=buttonHoldInterval; OnLeft?.Invoke(); } void OnLeftUp(BaseEventData e){ LeftPressed=false; } void OnRightDown(BaseEventData e){ RightPressed=true; rightTimer=buttonHoldInterval; OnRight?.Invoke(); } void OnRightUp(BaseEventData e){ RightPressed=false; } void OnDownDown(BaseEventData e){ DownPressed=true; downTimer = buttonHoldInterval; OnDown?.Invoke(); } void OnDownUp(BaseEventData e){ DownPressed=false; } void OnUpUp(BaseEventData e){ UpPressed = false; } void OnUpDown(BaseEventData e){ UpPressed = true; upTimer = buttonHoldInterval; OnUp?.Invoke(); } #endregion float leftTimer,rightTimer, upTimer,downTimer=0; void Update() { if(LeftPressed){ if(leftTimer > 0){ leftTimer-=Time.deltaTime; }else{ leftTimer=buttonHoldInterval; OnLeft?.Invoke(); } }else{ leftTimer=0; } if(RightPressed){ if(rightTimer > 0){ rightTimer-=Time.deltaTime; }else{ rightTimer=buttonHoldInterval; OnRight?.Invoke(); } }else{ rightTimer=0; } if(UpPressed){ if(upTimer > 0){ upTimer -= Time.deltaTime; }else{ upTimer = buttonHoldInterval; OnUp?.Invoke(); } } if(DownPressed){ if(downTimer > 0){ downTimer -= Time.deltaTime; }else{ downTimer = buttonHoldInterval; OnDown?.Invoke(); } } } }