Tanoda
PointerInteractable.cs
Go to the documentation of this file.
1using System;
2using System.Collections;
3using System.Collections.Generic;
4using UnityEngine;
7using UnityEngine.UI;
8
9public class PointerInteractable : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler, IPointerDownHandler, IPointerUpHandler, IPointerClickHandler
10{
11 //[SerializeField] private Color normalColor = Color.white;
12 //[SerializeField] private Color enterColor = Color.white;
13 //[SerializeField] private Color downColor = Color.white;
14 [SerializeField] public UnityEvent OnClick = new UnityEvent();
15 [SerializeField] private UnityEvent WhilePointerDown = new UnityEvent();
16
17 private bool downNow = false;
18 private bool wasDown = false;
19 Button button;
20 private void Awake()
21 {
22 //meshRenderer = GetComponent<MeshRenderer>();
23 }
24
25 public void OnPointerEnter(PointerEventData eventData)
26 {
27 //meshRenderer.material.color = enterColor;
28 }
29
30 public void OnPointerExit(PointerEventData eventData)
31 {
32 //meshRenderer.material.color = normalColor;
33 downNow = false;
34 }
35
36 public void OnPointerDown(PointerEventData eventData)
37 {
38 //meshRenderer.material.color = downColor;
39 downNow = true;
40 wasDown = true;
41 }
42
43 public void OnPointerUp(PointerEventData eventData)
44 {
45 //meshRenderer.material.color = enterColor;
46 downNow = false;
47 }
48
49 public void OnPointerClick(PointerEventData eventData) //not calling?
50 {
51 //if (GetComponent<MouseDragBehaviour>())
52 //{
53 // GetComponent<MouseDragBehaviour>().OnBeginDrag(eventData);
54 //}
55 if (GetComponentInChildren<Button>())
56 {
57 var results = new List<RaycastResult>();
58 try
59 {
60 EventSystem.current.RaycastAll(eventData, results);
61 foreach (var result in results)
62 {
63 button = result.gameObject.GetComponent<Button>();
64 }
65 button?.onClick?.Invoke();
66 }
67 catch (NullReferenceException)
68 {
69 // ignored
70 }
71 }
72 else
73 {
74 OnClick.Invoke();
75 }
76 }
77
78 private void Update()
79 {
80 if (downNow)
81 {
82 WhilePointerDown?.Invoke();
83 }
84 if (wasDown && !downNow) {
85 wasDown = false;
86 OnClick?.Invoke();
87 }
88
89 }
90}
UnityEngine.UI.Button Button
Definition: Pointer.cs:7
void OnPointerUp(PointerEventData eventData)
void OnPointerExit(PointerEventData eventData)
void OnPointerDown(PointerEventData eventData)
void OnPointerClick(PointerEventData eventData)
void OnPointerEnter(PointerEventData eventData)