71 lines
2.5 KiB
C#
71 lines
2.5 KiB
C#
using UnityEngine;
|
||
using UnityEngine.UI;
|
||
using TMPro;
|
||
|
||
public class UIButtonHighlight : MonoBehaviour
|
||
{
|
||
public GameObject[] highlightObjects; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>), <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||
|
||
public Color normalColor = Color.white; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
public Color highlightedColor = Color.yellow; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
|
||
public Color highlightOnColor = Color.yellow; // <20><><EFBFBD><EFBFBD> highlight-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
public Color highlightOffColor = Color.white; // <20><><EFBFBD><EFBFBD> highlight-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
|
||
private Image buttonImage;
|
||
private TextMeshProUGUI buttonText;
|
||
private Color originalTextColor;
|
||
public Color disabledTextColor = Color.gray;
|
||
|
||
public System.Action onFocused; // вызывается когда кнопка получает фокус
|
||
|
||
void Awake()
|
||
{
|
||
buttonImage = GetComponent<Image>();
|
||
buttonText = GetComponentInChildren<TextMeshProUGUI>();
|
||
|
||
if (buttonText != null)
|
||
originalTextColor = buttonText.color;
|
||
|
||
SetHighlighted(false);
|
||
}
|
||
|
||
public void SetHighlighted(bool state)
|
||
{
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
if (buttonImage != null)
|
||
buttonImage.color = state ? highlightedColor : normalColor;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
if (buttonText != null)
|
||
buttonText.color = state ? originalTextColor : disabledTextColor;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> highlight-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
if (highlightObjects != null)
|
||
{
|
||
foreach (var obj in highlightObjects)
|
||
{
|
||
if (!obj) continue;
|
||
|
||
// 1. <20><><EFBFBD><EFBFBD> Image
|
||
var img = obj.GetComponent<Image>();
|
||
if (img != null)
|
||
{
|
||
img.color = state ? highlightOnColor : highlightOffColor;
|
||
continue;
|
||
}
|
||
|
||
// 2. <20><><EFBFBD> SpriteRenderer
|
||
var sr = obj.GetComponent<SpriteRenderer>();
|
||
if (sr != null)
|
||
{
|
||
sr.color = state ? highlightOnColor : highlightOffColor;
|
||
continue;
|
||
}
|
||
}
|
||
}
|
||
|
||
if (state) onFocused?.Invoke();
|
||
}
|
||
}
|