Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEngine;
- using UnityEngine.UI;
- using UnityEngine.EventSystems;
- //based on a script by: booferei
- //https://answers.unity.com/questions/844524/ugui-how-to-increase-hitzone-click-area-button-rec.html?page=1&pageSize=5&sort=votes
- public class ButtonHitZone : MonoBehaviour
- {
- [Header("Size")]
- [SerializeField]
- private float m_Width;
- [SerializeField]
- private float m_Height;
- [Header("Gizmo")]
- [SerializeField]
- private Color m_GizmoColor = Color.white;
- [SerializeField]
- private float m_GizmoFillOpacity = 0.5f;
- public class EmptyGraphic : Graphic
- {
- protected override void OnPopulateMesh(VertexHelper vh)
- {
- vh.Clear();
- }
- }
- void OnValidate()
- {
- RectTransform rectTransform = GetComponent<RectTransform>();
- if (rectTransform != null)
- {
- m_Width = Mathf.Max(m_Width, rectTransform.sizeDelta.x);
- m_Height = Mathf.Max(m_Height, rectTransform.sizeDelta.y);
- }
- }
- void OnDrawGizmosSelected()
- {
- RectTransform rectTransform = GetComponent<RectTransform>();
- if (rectTransform != null)
- {
- float gizmoWidth = m_Width * rectTransform.lossyScale.x;
- float gizmoHeight = m_Height * rectTransform.lossyScale.y;
- Gizmos.color = m_GizmoColor;
- Gizmos.DrawWireCube(rectTransform.position, new Vector3(gizmoWidth, gizmoHeight, 0.0001f));
- if (m_GizmoFillOpacity > 0)
- {
- Gizmos.color = new Color(m_GizmoColor.r, m_GizmoColor.g, m_GizmoColor.b, m_GizmoFillOpacity);
- Gizmos.DrawCube(rectTransform.position, new Vector3(gizmoWidth, gizmoHeight, 0.0001f));
- }
- }
- }
- void Awake()
- {
- CreateHitZone();
- }
- void CreateHitZone()
- {
- // create child object
- GameObject gobj = new GameObject("Button Hit Zone");
- RectTransform hitzoneRectTransform = gobj.AddComponent<RectTransform>();
- {
- hitzoneRectTransform.SetParent(transform);
- hitzoneRectTransform.localPosition = Vector3.zero;
- hitzoneRectTransform.localScale = Vector3.one;
- hitzoneRectTransform.sizeDelta = new Vector2(m_Width, m_Height);
- }
- // create transparent graphic
- // Image image = gobj.AddComponent<Image>();
- // image.color = new Color(0, 0, 0, 0);
- gobj.AddComponent<EmptyGraphic>();
- // delegate events
- EventTrigger eventTrigger = gobj.AddComponent<EventTrigger>();
- // pointer up
- AddEventTriggerListener(eventTrigger, EventTriggerType.PointerDown,
- (BaseEventData data) =>
- {
- ExecuteEvents.Execute(gameObject, data,
- ExecuteEvents.pointerDownHandler);
- });
- // pointer down
- AddEventTriggerListener(eventTrigger, EventTriggerType.PointerUp,
- (BaseEventData data) =>
- {
- ExecuteEvents.Execute(gameObject, data,
- ExecuteEvents.pointerUpHandler);
- });
- // pointer click
- AddEventTriggerListener(eventTrigger, EventTriggerType.PointerClick,
- (BaseEventData data) =>
- {
- ExecuteEvents.Execute(gameObject, data,
- ExecuteEvents.pointerClickHandler);
- });
- }
- static void AddEventTriggerListener(EventTrigger trigger, EventTriggerType eventType, System.Action<BaseEventData> method)
- {
- EventTrigger.Entry entry = new EventTrigger.Entry();
- {
- entry.eventID = eventType;
- entry.callback = new EventTrigger.TriggerEvent();
- entry.callback.AddListener(new UnityEngine.Events.UnityAction<BaseEventData>(method));
- }
- trigger.triggers.Add(entry);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement