- Home /
Question by
hazarartuner · May 19, 2014 at 05:07 PM ·
guitexturewaitforsecondsfadeoutfadeincolor.lerp
GUI.DrawTexture Fade In/Out Problem
Hi, I made a sample scene that includes GUI texture. I try to make fade in/out effect with using Color.Lerp. The problem is i cant make fade in and out animation consecutivly. It doesnt matter what the order is, the second fade animation completes suddenly without fade effect. Here is the code you can try. Just copy paste it any scene, you will see the result. Is it a bug or what it is i dont know and need some help. Hope someone help me :)
Here is the code:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class Fader : MonoBehaviour {
private Texture2D bg;
private bool displayScreenFade = false;
private string fadeType = "fadeOut";
public Color lerpedColor = new Color(0, 0, 0, 1);
// Use this for initialization
void Start () {
bg = new Texture2D (1, 1);
bg.SetPixel(0, 0, new Color(0, 0, 0));
bg.Apply ();
StartCoroutine (fadeAnim());
}
// Update is called once per frame
void Update () {
if(displayScreenFade){
if(fadeType == "fadeOut"){
lerpedColor = Color.Lerp(new Color(0, 0, 0, 0), new Color(0, 0, 0, 1), Time.time);
}else {
lerpedColor = Color.Lerp(new Color(0, 0, 0, 1), new Color(0, 0, 0, 0), Time.time);
}
}
}
void OnGUI(){
GUI.color = lerpedColor;
GUI.DrawTexture(new Rect(0, 0, Screen.width, Screen.height), bg);
}
IEnumerator fadeAnim() {
displayScreenFade = true;
fadeType = "fadeOut";
yield return new WaitForSeconds(2);
fadeType = "fadeIn";
yield return new WaitForSeconds(2);
displayScreenFade = false;
}
}
Comment
Wiki
Answer by fafase · May 19, 2014 at 05:30 PM
Becuase you are using Time.time for your ratio. When you start it is 0 and up to 1 but when you try again it is already a value greater than 1 so the movement happens all at once.
Move your lerping in the coroutine maybe like this:
IEnumerator fadeIn() {
while(color.a > 0){
color.a -= Time.deltaTime;
yield return null;
}
}
IEnumerator fadeOut() {
while(color.a < 0.99){
color.a += Time.deltaTime;
yield return null;
}
}