我有一个带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时,这不会发生。任何帮助找出我做错了什么都将非常感谢!