/// Credit ömer faruk sayılır /// Sourced from - https://bitbucket.org/snippets/Lordinarius/nrn4L namespace UnityEngine.UI.Extensions { [ExecuteInEditMode, RequireComponent(typeof(Image))] [AddComponentMenu("UI/Effects/Extensions/Shining Effect")] public class ShineEffector : MonoBehaviour { public ShineEffect effector; [SerializeField, HideInInspector] GameObject effectRoot; [Range(-1, 1)] public float yOffset = -1; public float YOffset { get { return yOffset; } set { ChangeVal(value); yOffset = value; } } [Range(0.1f, 1)] public float width = 0.5f; RectTransform effectorRect; void OnEnable() { if (effector == null) { GameObject effectorobj = new GameObject("effector"); effectRoot = new GameObject("ShineEffect"); effectRoot.transform.SetParent(this.transform); effectRoot.AddComponent<Image>().sprite = gameObject.GetComponent<Image>().sprite; effectRoot.GetComponent<Image>().type = gameObject.GetComponent<Image>().type; effectRoot.AddComponent<Mask>().showMaskGraphic = false; effectRoot.transform.localScale = Vector3.one; effectRoot.GetComponent<RectTransform>().anchoredPosition3D = Vector3.zero; effectRoot.GetComponent<RectTransform>().anchorMax = Vector2.one; effectRoot.GetComponent<RectTransform>().anchorMin = Vector2.zero; effectRoot.GetComponent<RectTransform>().offsetMax = Vector2.zero; effectRoot.GetComponent<RectTransform>().offsetMin = Vector2.zero; effectRoot.transform.SetAsFirstSibling(); effectorobj.AddComponent<RectTransform>(); effectorobj.transform.SetParent(effectRoot.transform); effectorRect = effectorobj.GetComponent<RectTransform>(); effectorRect.localScale = Vector3.one; effectorRect.anchoredPosition3D = Vector3.zero; effectorRect.gameObject.AddComponent<ShineEffect>(); effectorRect.anchorMax = Vector2.one; effectorRect.anchorMin = Vector2.zero; effectorRect.Rotate(0, 0, -8); effector = effectorobj.GetComponent<ShineEffect>(); effectorRect.offsetMax = Vector2.zero; effectorRect.offsetMin = Vector2.zero; OnValidate(); } } void OnValidate() { effector.Yoffset = yOffset; effector.Width = width; if (yOffset <= -1 || yOffset >= 1) { effectRoot.SetActive(false); } else if (!effectRoot.activeSelf) { effectRoot.SetActive(true); } { } } void ChangeVal(float value) { effector.Yoffset = value; if (value <= -1 || value >= 1) { effectRoot.SetActive(false); } else if (!effectRoot.activeSelf) { effectRoot.SetActive(true); } { } } void OnDestroy() { if (!Application.isPlaying) { DestroyImmediate(effectRoot); } else { Destroy(effectRoot); } } } }