- Home /
Why can't I change the alpha of my controls over time?
I'm working toward fading in a few controls over a short time. I want to change the alpha of the controls from 0 to 1 via the timer that I've created, but I'm getting an error: "Cannot modify a value type return value of 'UnityEngine.GUI.color. Consider storing the value in a temporary variable."
I've looked through several threads and even found one here. But for some reason when I use the same method, I still get the error. Here's my script. Sorry, it's not too neat because I've been moving stuff around to get this to work.
using UnityEngine;
using System.Collections;
public class IntroScene : MonoBehaviour {
private float timer;
private bool startFade;
private float alpha;
private float fadeTime;
public Texture2D icon;
void OnGUI(){
if(startFade){
SetAlpha(GUI.color);
if(alpha > 0){
GUI.Box(new Rect(0, 0, 100, 100), new GUIContent(icon));
GUI.Box(new Rect(0,0,0,0), new GUIContent("Fading in box"));
}
//Set Normal Alpha for remaining controls
GUI.color.a = 1;
}
}
Color SetAlpha(Color a){
Color tmpAlpha = a;
tmpAlpha .a = alpha;
return GUI.color.a = tmpAlpha;
}
// Use this for initialization
void Start () {
startFade = false;
alpha = 0f;
fadeTime = 5f;
timer = 5f;
}
// Update is called once per frame
void Update () {
if(timer > 0f){
timer -= Time.deltaTime;
} else {
startFade = true;
}
if(startFade){
if(alpha >= 1f){
alpha = 1f;
} else {
alpha += Time.deltaTime/fadeTime;
}
}
}
}
Any help is MUCH appreciated. Thanks! ~Chris
Answer by BobbyDoogle · Mar 16, 2014 at 07:26 AM
Here's some code that worked for me to do the same effect. First I create a
private float drawAlpha=0;
then in my OnGUI I do this:
Color colPreviousGUIColor = GUI.color;
if (drawAlpha<.9f)
{ drawAlpha+=.01f;}
GUI.color = new Color(colPreviousGUIColor.r, colPreviousGUIColor.g, colPreviousGUIColor.b, drawAlpha);
This did the job for me, hope it works for you.
Answer by zharik86 · Mar 16, 2014 at 07:25 AM
See the function Color SetAlpha(Color a) on line 24. You return value must be color, see example:
Color SetAlpha(Color a) {
Color tmpAlpha = a;
tmpAlpha.a = alpha;
return tmpAlpha; //return only color
}
void OnGUI() {
if(startFade) {
GUI.color = SetAlpha(Color.white); //specific color in SetAlpha
if(alpha > 0){
GUI.Box(new Rect(0, 0, 100, 100), new GUIContent(icon));
GUI.Box(new Rect(0,0,0,0), new GUIContent("Fading in box"));
}
GUI.color = Color.white; //Set Normal Alpha for remaining controls
}
}
Unfortunately, you will see only alpha channel change at the text. As it will be almost imperceptible for a standard background of Box.
Your answer
Follow this Question
Related Questions
alpha value not changing(gradual decrease) during runtime 1 Answer
How to make the video background transparent 0 Answers
Shader to render RenderTexture plus alpha? 1 Answer
Changing a GUITexture's alpha gives me no effect in game. 0 Answers
How do you set a texture's `alpha is transparency` at runtime? 0 Answers