Files
YachtDice/Assets/Plugins/AllIn13DShader/Demo/Scripts/Tweens/AlphaTween.cs
T
2026-02-23 22:24:46 +07:00

93 lines
1.5 KiB
C#

using UnityEngine;
namespace AllIn13DShader
{
public class AlphaTween : MonoBehaviour
{
private static int MATPROP_ID_GENERAL_ALPHA = Shader.PropertyToID("_GeneralAlpha");
public enum State
{
NONE = 0,
FADE_IN = 1,
FADE_OUT = 2,
}
private MeshRenderer[] meshRenderers;
private bool IsTweening
{
get
{
bool res = state != State.NONE;
return res;
}
}
private AnimationCurve alphaCurve;
private float duration;
private float timer;
private State state;
private float alphaSrc;
private float alphaDst;
public void Init(DemoSceneConfiguration demoSceneConfig, MeshRenderer[] meshRenderers)
{
alphaCurve = demoSceneConfig.alphaCurve;
duration = demoSceneConfig.alphaDuration;
timer = 0f;
this.meshRenderers = meshRenderers;
state = State.NONE;
}
public void FadeIn()
{
timer = 0f;
state = State.FADE_IN;
alphaSrc = 0f;
alphaDst = 1f;
}
public void FadeOut()
{
timer = 0f;
state = State.FADE_OUT;
alphaSrc = 1f;
alphaDst = 0f;
}
public void Update()
{
if (IsTweening)
{
UpdateTweening();
}
}
private void UpdateTweening()
{
timer += Time.deltaTime;
float t = timer / duration;
float curveT = alphaCurve.Evaluate(t);
float alpha = Mathf.Lerp(alphaSrc, alphaDst, curveT);
for(int i = 0; i < meshRenderers.Length; i++)
{
meshRenderers[i].sharedMaterial.SetFloat(MATPROP_ID_GENERAL_ALPHA, alpha);
}
if(t >= 1f)
{
state = State.NONE;
timer = 0f;
}
}
}
}