2015-04-05 24 views
0

我想要做的事实际上非常非常简单,但不知何故,我可以找到一种方法来做到这一点。我正在做的是为我的游戏制作主菜单。这非常简单,基本上就像游戏开始时的所有其他选择屏幕一样,您可以在其中选择选项,级别选择等。使用GUI(Unity3D)(C#)创建菜单/选择屏幕时遇到困难

现在,我想补充一点,我已经在Google Play中有2个应用程序,所以我不是一个完整的初学者,但我不是专家。有什么让我感到如此愚蠢的是,这应该很容易做到,但我找不到一个办法。我希望背景和所有东西都是相同的,但是当你选择某个东西时,比如选择等级,我不想改变场景,我只想让屏幕上的文字淡出,并选择淡入淡出

我想要做的是给每个按钮(级别选择,选项,更多游戏)一个具有fadeout和fadeIn功能的脚本。当单击一个按钮时,会为每个按钮调用fadeOut函数,并禁用每个按钮按钮,图像组件,并使用.crossFadeAlpha并将文本组件淡化为零。说出如果播放器按下选项,则所有按钮都会淡出,然后如果播放器按下后退按钮,则屏幕上的所有按钮/文本会再次淡出,并且原始按钮会淡入并重新启用其文本,图像和按钮组件。

这对我来说似乎非常乏味,而且我一直在搞乱,所以我想知道是否有简单的解决方案来解决这个简单的问题。我知道这个问题有点愚蠢,但我不能弄明白,所以我需要帮助。谢谢

+0

ID实际建议要通过统一的教程,并检查了他们的GUI文档。它很好地放在一起,相当直接imo – TheNoob 2015-04-05 04:27:15

回答

1

我对你的问题的理解:你想要一个干净而健壮的方式淡出和整个屏幕UI和淡入另一个屏幕UI?

我的建议:

  1. 在你的菜单画面的所有用户界面创建一个GamObject父。为其他屏幕UI创建一个不同的GameObject父项。
  2. CanvasGroup添加到每个父对象。
  3. 按下按钮更改屏幕时,使用脚本淡出父代1,并使用CanvasGroup.alpha淡入父代2。

像这样的东西应该淡出/中(未测试的代码)做:

public IEnumerator FadeScreenTransition(float fadeTime, CanvasGroup screenFrom, CanvasGroup screenTo) { 
    float startTime = Time.unscaledTime; 
    while (Time.unscaledTime < startTime+fadeTime) { 
     float elapsed = Time.unscaledTime - startTime; 
     float alpha = 1 - elapsed/fadeTime; 
     screenFrom.alpha = alpha; 
     yield return null; 
    } 
    screenFrom.alpha = 0; 
    screenFrom.gameObject.SetActive(false); 

    screenTo.alpha = 0; 
    screenTo.gameObject.SetActive(true); 
    startTime = Time.unscaledTime; 
    while (Time.unscaledTime < startTime+fadeTime) { 
     float elapsed = Time.unscaledTime - startTime; 
     float alpha = 0 + elapsed/fadeTime; 
     screenTo.alpha = alpha; 
     yield return null; 
    } 
    screenTo.alpha = 1; 
} 
+0

谢谢你解决了我的问题 – user3738071 2015-04-06 13:01:46

相关问题