2016-08-17 1 views
0

私はこの問題に取り組んでいます。ボタンがクリックされたときに表示するそれぞれのポップアップに関連付けられた2つのボタンがあり、ボタンが再びクリックされると非表示になります。私はブール値を '!'で反転する必要があることを知っています。私は以下の私のコードでそれをどのように実装するか正確にはわかりません。私の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) ; 
     } 
    } 
} 

答えて

2

あなたは、各Button制御二つの異なるUI /ポップアップするので、各Buttonための2つのbooleanの変数を必要としています。 '!'でボタンをクリックすると、それぞれboolean変数が反転します。ブール変数をSetActive関数に渡すことができます。

また、Buttonが押されたかどうかを判断する方法が必要です。あなたは2つの異なる機能を使用することができますが、1つを使用して、Buttonインスタンスを渡す方が良いです。

サブスクライブしているので、のリスナーは、OnDisable関数でも削除する必要があります。

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

あなたのコードは次のようなものでなければなりません:

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

これを試してみてください:

  • PaletteState方法からブール_visibleパラメータを削除します。
  • 次に、GameObjectの状態を交互に切り替えます。
 
    public void PaletteState (GameObject _palette) 
    { 
     _palette.SetActive (!palette.activeSelf) ; 
    }