使按钮切换游戏对象打开和关闭

时间:2016-08-17 04:01:42

标签: c# unity3d boolean

我坚持这个。我有两个按钮,每个按钮都与相应的弹出窗口相关联,我想在单击按钮时显示,然后在再次单击按钮时隐藏,依此类推。我知道我需要使用'!'来反转布尔值。但我不确定如何在我的代码中实现它。应该编写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) ;
        }
    }
}

3 个答案:

答案 0 :(得分:2)

每个# requirepass foobared需要两个boolean变量,因为每个Button控制两个不同的UI /弹出窗口。使用' Button'点击按钮时,您可以翻转相应的boolean变量。然后,您可以将布尔变量传递给!函数。

此外,您需要一种方法来确定按下SetActive。您可以使用两个不同的功能,但使用一个并传递Button实例更好。

您还应该删除Button函数中RemoveListener的侦听器,因为您订阅了一个。

OnDisable

答案 1 :(得分:1)

试试这个:

  • PaletteState 方法中删除 bool _visible 参数。
  • 然后单独替换GameObject状态。
    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
}