我本质上是试图使用Unity 2D的UI库使UI对象淡入淡出。函数 fadeIn(( 启动一个协程 FadeCanvasGroup,它使用lerping缓慢地改变对象的alpha,以便淡入,fadeOut((;函数只是颠倒了这一点。但是,在调用 fadeIn(( 时,我不断被抛出"类、结构或接口方法必须具有返回类型"错误,这让我感到困惑,考虑到 fadeIn(( 和 fadeOut(( 都是 void 函数。
我已将函数更改为公共和私有,添加和删除了空隙,并尝试在没有函数的情况下启动协程,所有这些都失败了。同样,当使用 Unity 的引擎将函数附加到按钮时,它工作正常,但在通过脚本调用时,它会失败。
//The element in question being defined(And later set using the engine)
public CanvasGroup uiElement;
//The coroutine in question
private IEnumerator FadeCanvasGroup(CanvasGroup cg, float start, float end,
float lerpTime = 2f)
{
float timeStartedLerping = Time.time;
float timeSinceStarted = Time.time - timeStartedLerping;
float percentageComplete = timeSinceStarted / lerpTime;
while (true)
{
timeSinceStarted = Time.time - timeStartedLerping;
percentageComplete = timeSinceStarted / lerpTime;
float currentValue = Mathf.Lerp(start, end, percentageComplete);
cg.alpha = currentValue;
if (percentageComplete >= 1)
{
break;
}
yield return null;
}
print("done");
}
//The functions to fade in and out
public void fadeIn()
{
StartCoroutine(FadeCanvasGroup(uiElement, uiElement.alpha, 1));
}
public void fadeOut()
{
StartCoroutine(FadeCanvasGroup(uiElement, uiElement.alpha, 0));
}
fadeIn();
最后调用的 fadeIn((; 应该只是执行,但前面描述的错误正在发生。感谢任何希望帮助解决这个问题的人的时间。
如果没有一个好的最小、可重现的示例,就不可能给你确切的固定代码。然而。。。
Unity3d 使用 C# 的方式,错误消息有时并不清晰。但是,您会收到该错误,因为协程方法必须返回IEnumerable
。
有关如何正确执行此操作的说明,请参阅 Unity3d 文档中的"淡入淡出"示例。