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
参数,现在应该可以工作了;)只在智能手机上,所以我无法测试