Last active
May 12, 2018 15:07
-
-
Save luis-moral/93b90a170d371dd4b3337f9e40dfefff to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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