Skip to content

Instantly share code, notes, and snippets.

@luis-moral
Last active May 12, 2018 15:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save luis-moral/93b90a170d371dd4b3337f9e40dfefff to your computer and use it in GitHub Desktop.
Save luis-moral/93b90a170d371dd4b3337f9e40dfefff to your computer and use it in GitHub Desktop.
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class ExtendedHitZone : MonoBehaviour
{
[SerializeField] float extraWidth = 50;
[SerializeField] float extraHeight = 50;
public class EmptyGraphic : Graphic
{
protected override void OnPopulateMesh(VertexHelper vertexHelper)
{
vertexHelper.Clear();
}
}
void Awake()
{
CreateHitZone();
}
private void CreateHitZone()
{
RectTransform rectTransform = GetComponent<RectTransform>();
GameObject hitZone = new GameObject(name + " Hit Zone");
RectTransform hitzoneRectTransform = hitZone.AddComponent<RectTransform>();
hitzoneRectTransform.SetParent(transform);
hitzoneRectTransform.localPosition = Vector3.zero;
hitzoneRectTransform.localScale = Vector3.one;
hitzoneRectTransform.sizeDelta = new Vector2(rectTransform.rect.width + extraWidth, rectTransform.rect.height + extraHeight);
// Create transparent graphic
hitZone.AddComponent<EmptyGraphic>();
// Delegate events
EventTrigger eventTrigger = hitZone.AddComponent<EventTrigger>();
// Pointer Up
AddEventTriggerListener
(
eventTrigger,
EventTriggerType.PointerDown,
(BaseEventData eventData) =>
{
ExecuteEvents.Execute(base.gameObject, eventData, ExecuteEvents.pointerDownHandler);
}
);
// Pointer Down
AddEventTriggerListener
(
eventTrigger,
EventTriggerType.PointerUp,
(BaseEventData eventData) =>
{
ExecuteEvents.Execute(base.gameObject, eventData, ExecuteEvents.pointerUpHandler);
}
);
// Pointer Click
AddEventTriggerListener
(
eventTrigger,
EventTriggerType.PointerClick,
(BaseEventData eventData) =>
{
ExecuteEvents.Execute(base.gameObject, eventData, ExecuteEvents.pointerClickHandler);
}
);
}
private 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);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment