using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems; using UnityEditor; [ExecuteInEditMode] [RequireComponent(typeof(Graphic))] public abstract class BaseUIEffect : UIBehaviour, IMeshModifier, IMaterialModifier { [NonSerialized] private Graphic m_Graphic; protected Graphic graphic { get { if (m_Graphic == null) m_Graphic = GetComponent(); return m_Graphic; } } protected override void OnEnable() { base.OnEnable(); if (graphic != null) graphic.SetVerticesDirty(); } protected override void OnDisable() { if (graphic != null) graphic.SetVerticesDirty(); base.OnDisable(); } protected override void OnDidApplyAnimationProperties() { if (graphic != null) graphic.SetVerticesDirty(); base.OnDidApplyAnimationProperties(); } #if UNITY_EDITOR protected override void OnValidate() { base.OnValidate(); if (graphic != null) graphic.SetVerticesDirty(); } #endif public void ModifyMesh(Mesh mesh) { using (var vh = new VertexHelper(mesh)) { ModifyMesh(vh); vh.FillMesh(mesh); } } public virtual void ModifyMesh(VertexHelper vh) { } public virtual Material GetModifiedMaterial(Material baseMaterial) { return baseMaterial; } }