Question by
gravelpootis · Jun 26, 2021 at 02:09 PM ·
fadeout
Fading out and destroying gameobjects
I dont know why fadeout time doesnt work well, I want like put delayTime winch is time between start of fade out and fadeOutTime winch is time taken to fade out in Inspector I set fadeOutTime to 3 and I expect gameobject to fadeOut in 3 seconds but its faster
public class FadeDelayedDestroy : MonoBehaviour
{
[SerializeField] private float fadeOutTime;
[SerializeField] private float delayTime;
[SerializeField] public float endAlpha;
private MeshRenderer[] meshRenderers;
void Start()
{
meshRenderers = GetComponentsInChildren<MeshRenderer>();
foreach (MeshRenderer meshRenderer in meshRenderers)
{
meshRenderer.material.SetFloat("_Mode", 4f);
meshRenderer.material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha);
meshRenderer.material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
meshRenderer.material.SetInt("_ZWrite", 0);
meshRenderer.material.DisableKeyword("_ALPHATEST_ON");
meshRenderer.material.EnableKeyword("_ALPHABLEND_ON");
meshRenderer.material.DisableKeyword("_ALPHAPREMULTIPLY_ON");
meshRenderer.material.renderQueue = 3000;
}
StartCoroutine(FadeOutDestroy(fadeOutTime, delayTime, endAlpha));
}
IEnumerator FadeOutDestroy(float fadeOutTime, float delayTime, float endAlpha)
{
yield return new WaitForSeconds(delayTime);
for (float t = 0.0f; t < 1.0f; t += Time.deltaTime / fadeOutTime)
{
foreach (MeshRenderer meshRenderer in meshRenderers)
{
float alpha = meshRenderer.material.color.a;
Color tmpColor = new Color(meshRenderer.material.color.r, meshRenderer.material.color.g, meshRenderer.material.color.b, Mathf.Lerp(alpha, endAlpha, t));
meshRenderer.material.color = tmpColor;
}
yield return null;
}
Destroy(gameObject);
}
}
Comment