En este momento estás viendo Unity: el cambio de color de la imagen no se aplica a la escena

 – Unity

Unity: el cambio de color de la imagen no se aplica a la escena – Unity

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

Deja una respuesta