UIHoverScaler.cs 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. using UnityEngine;
  2. using UnityEngine.EventSystems;
  3. namespace FfalconXR
  4. {
  5. public class UIHoverScaler : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler
  6. {
  7. public Vector3 m_onHoverScaleValue = new Vector3(1.1f, 1.1f, 1.1f);
  8. public Vector3 m_onExitScaleValue = Vector3.one;
  9. public AnimationCurve m_scaleAnim = new AnimationCurve(new Keyframe(0, 0), new Keyframe(1, 1));
  10. public float m_animSpeed = 2;
  11. public bool m_is2D = true;
  12. private bool m_onFocus = false;
  13. private float m_curAnimTime;
  14. private void Awake()
  15. {
  16. }
  17. private void Update()
  18. {
  19. if (m_onFocus)
  20. {
  21. if (m_curAnimTime < 1)
  22. {
  23. m_curAnimTime += Time.deltaTime * m_animSpeed;
  24. if (m_curAnimTime > 1)
  25. {
  26. m_curAnimTime = 1;
  27. }
  28. float scaleValue = m_scaleAnim.Evaluate(m_curAnimTime);
  29. gameObject.transform.localScale = new Vector3(
  30. m_onExitScaleValue.x + (m_onHoverScaleValue.x - m_onExitScaleValue.x) * scaleValue
  31. , m_onExitScaleValue.y + (m_onHoverScaleValue.y - m_onExitScaleValue.y) * scaleValue
  32. , m_is2D ? 1 : (m_onExitScaleValue.z + (m_onHoverScaleValue.z - m_onExitScaleValue.z) * scaleValue));
  33. }
  34. }
  35. else
  36. {
  37. if (m_curAnimTime > 0)
  38. {
  39. m_curAnimTime -= Time.deltaTime * m_animSpeed;
  40. if (m_curAnimTime < 0)
  41. {
  42. m_curAnimTime = 0;
  43. }
  44. float scaleValue = m_scaleAnim.Evaluate(m_curAnimTime);
  45. gameObject.transform.localScale = new Vector3(
  46. m_onExitScaleValue.x + (m_onHoverScaleValue.x - m_onExitScaleValue.x) * scaleValue
  47. , m_onExitScaleValue.y + (m_onHoverScaleValue.y - m_onExitScaleValue.y) * scaleValue
  48. , m_is2D ? 1 : (m_onExitScaleValue.z + (m_onHoverScaleValue.z - m_onExitScaleValue.z) * scaleValue));
  49. }
  50. }
  51. }
  52. public void OnPointerEnter(PointerEventData eventData)
  53. {
  54. if (!gameObject.activeSelf) return;
  55. Debug.Log("Hover!!");
  56. m_onFocus = true;
  57. //gameObject.transform.localScale = m_onHoverScaleValue;
  58. }
  59. public void OnPointerExit(PointerEventData eventData)
  60. {
  61. if (!gameObject.activeSelf) return;
  62. m_onFocus = false;
  63. //gameObject.transform.localScale = m_onExitScaleValue;
  64. }
  65. }
  66. }