【发布时间】:2016-05-14 07:28:17
【问题描述】:
您好,我正在尝试创建一个统一的协程来处理各种对象的褪色。到目前为止,我能够获得我想要的不同类型的 alpha 值,但是对于如何设置新颜色后,我处于死胡同。这是我的代码:
public static IEnumerator FadeTo(float aValue, float aTime,GameObject gameObj)
{
Component[] allComponents = gameObj.GetComponents(typeof(Component));
Component fadableComponent;
Type type = null;
float alpha=0;
foreach(Component c in allComponents)
{
if(c.GetType()==typeof(Image))
{
fadableComponent = c;
alpha = fadableComponent.GetComponent<Image>().color.a;
type = fadableComponent.GetType();
Debug.Log("Found a image");
break;
}
if (c.GetType() == typeof(Renderer))
{
fadableComponent = c;
alpha = fadableComponent.GetComponent<Renderer>().material.color.a;
type = fadableComponent.GetType();
break;
}
if (c.GetType() == typeof(SpriteRenderer))
{
fadableComponent = c;
alpha = fadableComponent.GetComponent<SpriteRenderer>().color.a;
type = fadableComponent.GetType();
break;
}
if(c.GetType()== typeof(CanvasGroup))
{
fadableComponent = c;
alpha = fadableComponent.GetComponent<CanvasGroup>().alpha;
type = fadableComponent.GetType();
}
Debug.Log(alpha.ToString());
}
for (float t = 0.0f; t < 1.0f; t += Time.deltaTime / aTime)
{
Color newColor = new Color(1, 1, 1, Mathf.Lerp(alpha, aValue, t));
gameObj.transform.GetComponent(type) // What now ?!
yield return null;
}
yield return null;
}
}
现在我知道如何做到这一点,让我们说另一组 if 或什么不是,但我想避免这种情况。例如我想避免的解决方案,我查看了 iTween 实现。这是我想要避免的一个完美示例:
if(target.GetComponent<GUITexture>()){
target.GetComponent<GUITexture>().color=colors[3];
}else if(target.GetComponent<GUIText>()){
target.GetComponent<GUIText>().material.color=colors[3];
}else if(target.GetComponent<Renderer>()){
target.GetComponent<Renderer>().material.color=colors[3];
}else if(target.GetComponent<Light>()){
target.GetComponent<Light>().color=colors[3];
}
这是一团糟,妈妈们的意大利面。延长这将是一场噩梦。
【问题讨论】:
-
Uri,您可能正在寻找 c# 语言中的 (1),generics,这是该语言非常强大的部分。 “即时介绍”超出了 QA 的范围,请谷歌获取教程。但是 (2) 在 Unity 中,我认为您正在寻找 Tweengi>(“Unity 中最令人惊奇的事情”)...stackoverflow.com/questions/36121120/…跨度>
-
Uri,请注意,基本上你必须在这里使用扩展。 (无论您选择哪种解决方案。)如果是 Unity 新手 stackoverflow.com/a/35629303/294884