如何在 Unity 中单击按钮后显示模态 window?

How to show a modal window after button click in Unity?

我是 Unity 和 C# 编程的新手。我只想知道如何在单击按钮时打开模式 window。

public class Buttonwindow: MonoBehaviour 
{
    public void clicked(Button button)
    {
        Debug.Log("Button click!");

    }
}

此处将使用什么代码来显示弹出窗口 window?谢谢!

使用 yourModelWindowPanel.SetActive(true) 到 enable/show 您的 Window 并将 false 传递给 SetActive 函数以隐藏它。这可能是一个面板,下面有 UI 个组件。

public class Buttonwindow: MonoBehaviour 
{
    public GameObject modalWindow;
    public void clicked(Button button)
    {
        Debug.Log("Button click!");
        modalWindow.SetActive(true);
    }
}

在场景中,右击 -> UI -> Canvas 创建一个 canvas(所有 UI 元素应该在 Canvas ) 然后右键单击您创建的 canvas,然后 UI-> 您想要的元素(文本可能适合您的目的)

然后正如@Programmer所说

public class Buttonwindow: MonoBehaviour 
{
    public GameObject modalWindow;
    public void clicked(Button button)
    {
    Debug.Log("Button click!");
    modalWindow.SetActive(true);
    }
}

不要忘记在 Inspector

中将 modalWindow 设置为您的对象

由于我的声誉,我无法发表评论,但这个答案只是对@Programmer 的真实答案的改进。

Here 是 Unity UI 的教程。

这些 "answers" 都没有真正回答问题。模态 window 是保持焦点的 window,在用户单击按钮以满足 yes/no 等条件之前,无法执行任何其他操作。这意味着当模态 window 处于活动状态时,其他任何东西都无法获得焦点。模态 window 无法导航离开。

要制作模式 window,面板内的任何按钮都必须设置为显式导航并设置为只能导航到面板内的其他按钮。

如果面板内只有一个按钮,请将导航设置为none。

要回答@Ba'al consern,您可以使用此脚本锁定所有非子交互项,以通过 keyboard/controller 导航获得模态效果。

using System.Collections.Generic;
using UnityEngine.UI;
using System;
using System.Linq;

namespace Legend
{
    public class ModalLocker : MonoBehaviour
    {
        Selectable[] selectables;

        void OnEnable()
        {
            selectables = FindObjectsOfType<Selectable>().Where(s => s.interactable && !s.transform.IsChildOf(transform)).ToArray();
            foreach (var selectable in selectables)
            {
                selectable.interactable = false;
                //Debug.Log($"{selectable} disabled");
            }
        }

        void OnDisable()
        {
            if (selectables == null)
                return;

            foreach (var selectable in selectables)
                selectable.interactable = true;
            selectables = null;
        }
    }
}