淡出所有按钮的单个实例

时间:2017-02-02 10:31:22

标签: c# unity3d unity5

我有一个带4个按钮的菜单。如果用户点击其中一个,我会突出显示它以显示它已被选中。当用户将与按钮对应的项目放置在游戏场景中时,该按钮淡出。

我遇到的问题是,当我选择一个按钮然后选择另一个按钮时,两个按钮都会突出显示。我试图实现的行为是第一个按钮在按下第二个按钮时淡出。

我尝试将selectedButton设置为null,从Update()调用FadeAll()方法,但单击的第一个和第二个按钮仍然突出显示。当我点击游戏场景时,会放置与最新按钮对应的GameObject,并且所有按钮都会褪色。

这是我控制按钮淡出的类:

using UnityEngine;
using System.Collections;

public class Button : MonoBehaviour {

    public static GameObject selectedButton;
    [SerializeField] private GameObject thisButton;
    private SpriteRenderer sprite;
    private Color originalColor;
    private Button[] buttons;
    private StarDisplay starDisplay;

    void Start () {
        starDisplay = GameObject.FindObjectOfType<StarDisplay>();
        buttons = GameObject.FindObjectsOfType<Button>();
        sprite = GetComponent<SpriteRenderer>();
        originalColor = sprite.color;
        FadeAll();
    }

    void Update () {
        if (!selectedButton){
            FadeAll();
        }
    }

    private void FadeAll(){
        foreach (Button button in buttons){
            Color fade = sprite.color;
            fade.a = 0.5f;
            sprite.color = fade;
        }
    }

    void OnMouseDown(){
        //TODO error, if select one then select another, both highlight
        selectedButton = null;
        if (thisButton.GetComponent<Defender>().StarCost <= starDisplay.StarCount){
            selectedButton = thisButton;
            sprite.color = originalColor;
        }
    }
}

这是来自其他类的相关代码,当一个对象被放入游戏场景时,它会淡化所有按钮。

using UnityEngine;
using System.Collections;

public class DefenderSpawner : MonoBehaviour {

    private Vector2 targetLocation;
    private GameObject parent;
    private StarDisplay starDisplay;
    private int defenderCost;
    void Start () {
        starDisplay = GameObject.FindObjectOfType<StarDisplay>();
        parent = GameObject.Find("Defenders");
        if (!parent){
            parent = new GameObject("Defenders");
        }
    }

    void OnMouseDown(){
        targetLocation = CalculateWorldPointOfMouseClick(Input.mousePosition);
        if (Button.selectedButton){
            defenderCost = Button.selectedButton.GetComponent<Defender>().StarCost;
            if (starDisplay.UseStars(defenderCost)){
                GameObject defender = Instantiate(Button.selectedButton, targetLocation, Quaternion.identity) as GameObject;
                defender.transform.parent = parent.transform;
                Button.selectedButton = null;
            } else {
                print("Cannot afford defender");
            }
        }
    }

在第二个类中,当所选Button == null时,所有按钮都会淡出。但是在第一个类中,当我在OnMouseDown()中设置selectedButton = null时,这不会发生。任何帮助找出我做错了什么都将非常感谢!

0 个答案:

没有答案