我坚持这个。我有两个按钮,每个按钮都与相应的弹出窗口相关联,我想在单击按钮时显示,然后在再次单击按钮时隐藏,依此类推。我知道我需要使用'!'来反转布尔值。但我不确定如何在我的代码中实现它。应该编写PaletteState函数的正确方法是什么?谢谢!
using UnityEngine ;
using System.Collections ;
using UnityEngine.UI ;
public class ShowHidePalettes : MonoBehaviour
{
public Button changeColorButton ;
public GameObject colorPalette ;
public Button brushSizeButton ;
public GameObject brushSizePalette ;
void Awake ()
{
changeColorButton.onClick.AddListener (() => PaletteState (colorPalette, true)) ;
brushSizeButton.onClick.AddListener (() => PaletteState (brushSizePalette, true)) ;
}
void Start ()
{
PaletteState (colorPalette, false) ;
PaletteState (brushSizePalette, false) ;
}
public void PaletteState (GameObject _palette, bool _visible)
{
_visible = !_visible ;
if (_visible == true)
{
_palette.SetActive (true) ;
} else
{
_palette.SetActive (false) ;
}
}
}
答案 0 :(得分:2)
每个# requirepass foobared
需要两个boolean
变量,因为每个Button
控制两个不同的UI /弹出窗口。使用' Button
'点击按钮时,您可以翻转相应的boolean
变量。然后,您可以将布尔变量传递给!
函数。
此外,您需要一种方法来确定按下SetActive
。您可以使用两个不同的功能,但使用一个并传递Button
实例更好。
您还应该删除Button
函数中RemoveListener
的侦听器,因为您订阅了一个。
OnDisable
答案 1 :(得分:1)
试试这个:
public void PaletteState (GameObject _palette) { _palette.SetActive (!palette.activeSelf) ; }
答案 2 :(得分:0)
您的代码应该是这样的:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class ShowHidePalettes : MonoBehaviour
{
public Button changeColorButton;
public GameObject colorPalette;
public Button brushSizeButton;
public GameObject brushSizePalette;
private bool colorPalleteVisibility = false;
private bool brushSizePalleteVisibility = false;
public void PaletteState(PaleteType type)
{
if (type == PaleteType.ColorPalette)
{
colorPalleteVisibility = !colorPalleteVisibility;
colorPalette.SetActive(colorPalleteVisibility);
}
else if (type == PaleteType.BrushSizePalette)
{
brushSizePalleteVisibility = !brushSizePalleteVisibility;
colorPalette.SetActive(brushSizePalleteVisibility);
}
}
}
public enum PaleteType
{
ColorPalette, BrushSizePalette
}