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

时间:2016-09-23 11:31:22

标签: c# unity3d augmented-reality vuforia

我是Unity和C#编程的新手。我只是想知道如何在按钮点击时打开一个模态窗口。

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

    }
}

这里会显示什么代码来显示弹出窗口?谢谢!

4 个答案:

答案 0 :(得分:5)

使用yourModelWindowPanel.SetActive(true)启用/显示您的窗口,并将false传递给SetActive功能以隐藏它。这可能是一个包含UI组件的面板。

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

答案 1 :(得分:2)

在场景中,右键单击 - > UI - > Canvas创建画布(所有UI元素应该在Canvas中) 然后右键单击您创建的画布,然后在UI->你想要的元素(文字可能适用于你的purpouse)

然后正如@Programmer所说

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

不要忘记在检查器

中将modalWindow设置为您的对象

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

Here是Unity UI的教程。

答案 2 :(得分:2)

这两个“答案”都不能真正回答问题。模态窗口是保持焦点的窗口,在用户单击按钮满足“是/否”之类的条件之前,无法进行任何其他操作。这意味着当模式窗口处于活动状态时,其他任何事物都无法获得焦点。模态窗口无法导航。

要创建模式窗口,必须将面板中的所有按钮设置为显式导航并进行设置,以便它们只能导航至面板中的其他按钮。

如果面板中只有一个按钮,则将导航设置为无。

答案 3 :(得分:0)

要回答@ Ba'al注意事项,您可以使用此脚本锁定所有非子交互对象,以通过键盘/控制器导航获得模态效果。

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