2016-05-28 07:04:08 +08:00
|
|
|
|
/// 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);
|
|
|
|
|
}
|
|
|
|
|
}
|
2023-01-03 19:42:22 +08:00
|
|
|
|
|
2016-05-28 07:04:08 +08:00
|
|
|
|
void OnDestroy()
|
|
|
|
|
{
|
|
|
|
|
if (!Application.isPlaying)
|
|
|
|
|
{
|
|
|
|
|
DestroyImmediate(effectRoot);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
Destroy(effectRoot);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|