【问题标题】:Having trouble creating menu/selection screen with GUI (Unity3D) (C#)使用 GUI (Unity3D) (C#) 创建菜单/选择屏幕时遇到问题
【发布时间】:2015-04-05 14:47:17
【问题描述】:

我想要做的其实非常非常简单,但我总能找到一种方法来做到这一点。我正在做的是为我的游戏制作主菜单。它非常简单,基本上就像游戏开始时的所有其他选择屏幕一样,您可以在其中选择选项、关卡选择等。

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

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

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

【问题讨论】:

  • 我建议实际阅读 unity 的教程并查看他们的 gui 文档。它组合得很好,而且非常直接 imo

标签: unity3d


【解决方案1】:

我对您的问题的理解:您想要一种干净且健壮的方式来淡出整个屏幕 UI 并淡入另一个屏幕 UI?

我的建议:

  1. 为菜单屏幕中的所有 UI 创建单个 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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 2021-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-16
    相关资源
    最近更新 更多