我想将UI图像从透明(alpha = 0)渐变为alpha = 1,我认为我的方法应该是正确的,但是它不起作用,图像没有变化。
这是我尝试执行的代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Fadein : MonoBehaviour {
public float FadeRate;
private Image image;
private float targetAlpha;
// Use this for initialization
void Start()
{
image = GetComponent<Image>();
Material instantiatedMaterial = Instantiate<Material>(image.material);
image.material = instantiatedMaterial;
targetAlpha = image.material.color.a;
Invoke("startFadein", 1);
}
IEnumerator FadeIn()
{
targetAlpha = 1.0f;
Color curColor = image.material.color;
while (Mathf.Abs(curColor.a - targetAlpha) > 0.0001f)
{
curColor.a = Mathf.Lerp(curColor.a, targetAlpha, FadeRate * Time.deltaTime);
image.material.color = curColor;
yield return null;
}
}
void startFadein()
{
StartCoroutine(FadeIn());
}
}
图像没有变化。但是我尝试使用此代码从1到0进行淡入淡出,它只是起作用了,我不知道为什么淡入淡出不起作用?
答案 0 :(得分:0)
image.material.color
不是您想的那样使用几行调试行,即使将图像颜色倍数设置为0,我也可以确定图像材料的alpha报告1
。
如果我将curColor
改写为0,然后让循环执行该操作,则图像也将不会出现。
这是因为:
不是image.material.color
。是image.color
。
因此您的固定代码为:
IEnumerator FadeIn() {
targetAlpha = 1.0f;
Color curColor = image.color;
while(Mathf.Abs(curColor.a - targetAlpha) > 0.0001f) {
Debug.Log(image.material.color.a);
curColor.a = Mathf.Lerp(curColor.a, targetAlpha, FadeRate * Time.deltaTime);
image.color = curColor;
yield return null;
}
}
其他一些事情:
Invoke("startFadein", 1);
。您只需致电StartCoroutine(FadeIn());
并将yield return new WaitForSeconds(1)
放在顶部即可。curColor.a = targetAlpha; image.color = curColor;
放在while循环之后来解决此问题。