2016-08-17 2 views
0

Ich stecke auf diesem. Ich habe zwei Buttons, die jeweils einem Pop-up zugeordnet sind, das ich beim Klicken auf die Schaltflächen anzeigen möchte, und dann ausblenden, wenn die Schaltflächen erneut angeklickt werden und so weiter. Ich weiß, dass ich den Boolean mit '!' Invertieren muss aber ich bin mir nicht sicher, wie ich es in meinem Code unten implementieren soll. Wie sollte meine PaletteState-Funktion korrekt geschrieben werden? Vielen Dank!Make Button Ein- und Ausschalten eines GameObjects

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

Antwort

2

Sie benötigen zwei boolean Variablen für jedes Button da jede Button Steuer zwei verschiedene UI/popup. Sie spiegeln die entsprechende Variable boolean, wenn Sie auf die Schaltfläche klicken, mit der '!'. Sie können dann die boolesche Variable an die Funktion SetActive übergeben.

Sie müssen auch einen Weg zu bestimmen, welche Button gedrückt wird. Sie können zwei verschiedene Funktionen dafür verwenden, aber die Verwendung einer und das Übergeben der Button Instanz ist besser.

Sie sollten Listener auch mit RemoveListener in der OnDisable-Funktion entfernen, da Sie eine abonniert haben.

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

public class ShowHidePalettes : MonoBehaviour 
{ 
    public Button changeColorButton; 
    public GameObject colorPalette; 
    bool showColorPalette = false; 

    public Button brushSizeButton; 
    public GameObject brushSizePalette; 
    bool showSizeButton = false; 

    void Start() 
    { 
     colorPalette.SetActive(false); 
     brushSizePalette.SetActive(false); 
    } 

    void buttonCallBack(Button buttonClicked) 
    { 
     //Change Color Palette Button clicked 
     if (buttonClicked == changeColorButton) 
     { 
      showColorPalette = !showColorPalette;//Flip 
      colorPalette.SetActive(showColorPalette); 
     } 

     //Change Brush Size Button Button clicked 
     if (buttonClicked == brushSizeButton) 
     { 
      showSizeButton = !showSizeButton;//Flip 
      brushSizePalette.SetActive(showSizeButton); 
     } 
    } 

    void OnEnable() 
    { 
     changeColorButton.onClick.AddListener(() => buttonCallBack(changeColorButton)); 
     brushSizeButton.onClick.AddListener(() => buttonCallBack(brushSizeButton)); 
    } 


    void OnDisable() 
    { 
     changeColorButton.onClick.RemoveListener(() => buttonCallBack(changeColorButton)); 
     brushSizeButton.onClick.RemoveListener(() => buttonCallBack(brushSizeButton)); 
    } 
} 
0

Ihr Code sollte wie folgt sein:

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

Try this:

  • Entfernen Sie die Bool _visible Parameter von PaletteState Methode.
  • Dann alternate GameObject Zustand von selbst.
 
    public void PaletteState (GameObject _palette) 
    { 
     _palette.SetActive (!palette.activeSelf) ; 
    }