Unity: el cambio de color de la imagen no se aplica a la escena
– UnityAssets3Free
buenas , me llamo jorge y hoy os traigo
esta nueva pregunta
Simplemente quiero crear una página con pestañas. Para esto, utilicé un botón para cada botón de pestaña y mostré una página específica al hacer clic. Pero necesito el botón para mantener el color seleccionado hasta que se seleccione otro TabButton de la misma lista, lo que no se hace de forma predeterminada. Así que traté de editar el .colorBlock
pero los cambios solo se aplicaron en el inspector pero no en la escena. Así que eliminé el componente del botón e intenté manipular el Image.color
pero mismo resultado. Así que creé el mío UI/Default - Material
y traté de cambiar el color Tint
de material. Pero al hacer eso, toda la interfaz de usuario es invisible para siempre una vez que configuro el color y tengo que reiniciar Unity. ¿Estoy haciendo algo mal o Unity tiene errores?
Cambiar bloque de color:
private void UpdateColor(TabButton button, Color color)
ColorBlock colorBlock = button.Button.colors;
colorBlock.normalColor = color;
colorBlock.highlightedColor = color;
button.Button.colors = colorBlock;
Cambiar el color de la imagen:
private void UpdateColor(TabButton button, Color color)
button.Image.color = color;
Cambiar el color del material:
private void UpdateColor(TabButton button, Color color)
button.Image.material.SetColor("_Color", color);
1 respuesta 1
Cuando trato con las pestañas de la interfaz de usuario, siempre trato de escribir mi propia lógica para poder controlar completamente lo que sucede.
TabsController.cs
using UnityEngine;
using UnityEngine.Events;
public class TabsController : MonoBehaviour
[SerializeField]
private TabButton[] _tabButtons;
public UnityAction<int> TabIdChangedAction;
private void OnEnable()
TabIdChangedAction += OnTabIdChanged;
private void OnDisable()
TabIdChangedAction -= OnTabIdChanged;
private void Start()
Initialize();
private void Initialize()
// add listener for each tab button with
// its tab id from the array
for (int i = 0; i < _tabButtons.Length; i++)
int id = i;
_tabButtons[id].TButton.onClick.AddListener(() =>
ChangedCurrentTab(id);
);
// set first tab as current
ChangedCurrentTab(0);
public void ChangedCurrentTab(int id)
TabIdChangedAction?.Invoke(id);
// update tab buttons visuals
// on tab id changed
// while passing to each tab button if it's the current
private void OnTabIdChanged(int tabId)
for (int i = 0; i < _tabButtons.Length; i++)
_tabButtons[i].UpdateVisuals(i == tabId);
TabButton.cs
using UnityEngine;
using UnityEngine.UI;
public class TabButton : MonoBehaviour
[SerializeField]
private Button _tabButton;
public Button TButton => _tabButton;
public void UpdateVisuals(bool isCurrent)
_tabButton.image.color = isCurrent ? Color.green : Color.white;
Descripción general de la ejecución
https://gfycat.com/flimsydangerousairedale
Observación:
Esta es una implementación cruda solo para llevarse bien con la idea.
nota: si aun no se resuelve tu pregunta por favor dejar un comentario y pronto lo podremos de nuevo , muchas gracias
sin mas,espero que te funcione