C# 使用下拉菜单隐藏/显示面板

C# 使用下拉菜单隐藏/显示面板,c#,unity3d,C#,Unity3d,我刚刚开始了一个关于一些基本游戏内容的统一项目 这可能是错误的问题或无效的过程 我已经做了隐藏/显示面板上的按钮点击,现在我想隐藏/显示后的下拉列表值的变化 我有两个面板,一个用于基本信息,另一个用于安全信息。在选择下拉列表值之后,我想显示其中一个面板并隐藏第二个面板 但我不知道如何做到这一点 我正在尝试一些基本的逻辑,并坚持下去 我所做的: using UnityEngine; using UnityEngine.UI; using UnityEngine.Events; using Syst

我刚刚开始了一个关于一些基本游戏内容的统一项目

这可能是错误的问题或无效的过程

我已经做了隐藏/显示面板上的按钮点击,现在我想隐藏/显示后的下拉列表值的变化

我有两个面板,一个用于基本信息,另一个用于安全信息。在选择下拉列表值之后,我想显示其中一个面板并隐藏第二个面板

但我不知道如何做到这一点

我正在尝试一些基本的逻辑,并坚持下去

我所做的:

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Events;
using System.Collections;

public class WithrowModalPanel : MonoBehaviour
{

    public Button cancelButton;
    public GameObject modalPanelObject;
    public GameObject modalPanelObjectAdvance;
    public Dropdown myDropdown;

    private static WithrowModalPanel modalPanel;

    public static WithrowModalPanel Instance()
    {
        if (!modalPanel)
        {
            modalPanel = FindObjectOfType(typeof(WithrowModalPanel)) as WithrowModalPanel;
            if (!modalPanel)
                Debug.LogError("There needs to be one active ModalPanel script on a GameObject in your scene.");
        }

        return modalPanel;
    }

    void Update()
    {
        switch (myDropdown.value)
        {
            case 1:
                Debug.Log("Basic panel!");
                modalPanelObject.SetActive(true);
                modalPanelObjectAdvance.SetActive(false);
                break;

            case 2:
                Debug.Log("Advance panel!");
                modalPanelObjectAdvance.SetActive(true);
                modalPanelObject.SetActive(false);
                break;
        }
    }
}
我只是盯着unity,对它的结构不太了解

注意,它是0基索引的,因此第一个条目是
0
而不是
1
。我不知道你的完整设置,但我想这是你尝试的主要问题

然后,下拉列表中有一个事件,而不是在
Update
中执行它。您应该向它注册一个侦听器

private void Start()
{
    // Just to be sure it is always only added once
    // I have the habit to remove before adding a listener
    // This is valid even if the listener was not added yet
    myDropdown.onValueChanged.RemoveListener(HandleValueChanged);
    myDropdown.onValueChanged.AddListener(HandleValueChanged);
}

private void OnDestroy()
{
    // To avoid errors also remove listeners as soon as they
    // are not needed anymore
    // Otherwise in the case this object is destroyed but the dropdown is not
    // it would still try to call your listener -> Exception
    myDropdown.onValueChanged.RemoveListener(HandleValueChanged);
}

private void HandleValueChanged(int newValue)
{
    switch (newValue)
    {
        case 0:
            Debug.Log("Basic panel!");
            modalPanelObject.SetActive(true);
            modalPanelObjectAdvance.SetActive(false);
            break;

        case 1:
            Debug.Log("Advance panel!");
            modalPanelObjectAdvance.SetActive(true);
            modalPanelObject.SetActive(false);
            break;
    }
}

提示:您可以使用
FindObjectOfType

modalPanel = FindObjectOfType<WithrowModalPanel>();
modalPanel=FindObjectOfType();

如何使用modalPanel=FindObjectOfType();就像我在上面的文件中使用的一样?它在
myDropdown.onValueChanged.RemovelListener(HandleValueChanged)上显示错误
参数1:无法从“方法组”转换为“UnityAction”
哦,显然它需要一个
int
参数,现在应该可以工作了;)只在智能手机上,所以我无法测试