93 lines
1.5 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|
|
} |