com.unity.uiextensions/Runtime/Scripts/Effects/ShineEffector.cs

113 lines
3.7 KiB
C#
Raw Normal View History

/// 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);
}
}
}
}