PointerEventComponent.cs 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. using System.Collections.Generic;
  2. using UnityEngine;
  3. using UnityEngine.Events;
  4. namespace WS
  5. {
  6. ///<summary>按下</summary>
  7. public enum PointerEventType
  8. {
  9. ///<summary>按下</summary>
  10. OnDown,
  11. ///<summary>抬起</summary>
  12. OnUp,
  13. ///<summary>进入</summary>
  14. OnEnter,
  15. ///<summary>退出</summary>
  16. OnExit
  17. }
  18. ///<summary>指针事件管理</summary>
  19. public class PointerEventComponent : WSComponent
  20. {
  21. //所有指针事件
  22. private Dictionary<GameObject, PointerEventMono> AllPointerEvent = new Dictionary<GameObject, PointerEventMono>();
  23. /// <summary>给物体(UI)添加指针事件</summary>
  24. /// <param name="ui">UI</param>
  25. /// <param name="type">指针类型</param>
  26. /// <param name="callback">回调</param>
  27. public void AddPointerEvent(GameObject ui, PointerEventType type, UnityAction callback)
  28. {
  29. if (!AllPointerEvent.ContainsKey(ui))
  30. {
  31. PointerEventMono component = ui.AddComponent<PointerEventMono>();
  32. AllPointerEvent.Add(ui, component);
  33. }
  34. PointerEventMono pointer = AllPointerEvent[ui];
  35. switch (type)
  36. {
  37. case PointerEventType.OnDown:
  38. pointer.OnDown = callback;
  39. break;
  40. case PointerEventType.OnUp:
  41. pointer.OnUp = callback;
  42. break;
  43. case PointerEventType.OnEnter:
  44. pointer.OnEnter = callback;
  45. break;
  46. case PointerEventType.OnExit:
  47. pointer.OnExit = callback;
  48. break;
  49. }
  50. }
  51. public override void Dispose()
  52. {
  53. base.Dispose();
  54. foreach (var item in AllPointerEvent)
  55. {
  56. UnityEngine.Object.Destroy(item.Value);
  57. }
  58. AllPointerEvent.Clear();
  59. }
  60. }
  61. }