使用GUI(Unity3D)创建菜单/选择屏幕时遇到问题(C#)

时间:2015-04-05 01:49:07

标签: unity3d

我想要做的事实上非常简单,但不知怎的,我可以找到一种方法来做到这一点。我正在做的是为我的游戏制作主菜单。它非常简单,基本上就像你在游戏开始时拥有的所有其他选择屏幕一样,你可以选择选项,等级选择等。

现在,我想补充一点,我已经在Google Play中拥有2个应用,所以我不是一个完整的编程初学者,但我也不是专家。让我觉得如此愚蠢的是,这应该很容易做到,但我找不到办法去做。我想要背景和一切都是一样的,但是当你选择一些东西时,比如水平选择,我不想改变场景,我只是希望屏幕上的文字淡出,水平选择淡入

我要做的是给每个按钮(关卡选择,选项,更多游戏)一个具有fadeOut和FadeIn功能的脚本。单击一个按钮时,将为每个按钮调用fadeOut函数,并禁用每个按钮按钮,图像组件,并使用.crossFadeAlpha并将文本组件淡化为零。假设玩家按下选项,然后所有按钮淡出,然后如果玩家按下后退按钮,则屏幕上的所有按钮/文本再次淡出,原始按钮淡入并重新启用其文本,图像和按钮组件。

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

1 个答案:

答案 0 :(得分:1)

我对您的问题的理解:您想要一个干净而强大的淡出方式和整个屏幕UI并在其他屏幕UI中淡出?

我的建议:

  1. 在菜单屏幕中为所有UI创建单个GamObject父级。为其他屏幕UI创建不同的GameObject父级。
  2. CanvasGroup添加到每个父对象。
  3. 按下按钮更改屏幕时,使用脚本淡出父级1,使用CanvasGroup.alpha淡化父级2。
  4. 这样的事情应该用于淡出/进入(未经测试的代码):

    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;
    }