Каким образом можно добавить возможность выбора цветовой схемы (например, светлой или темной темы) в приложение, созданное с использованием Unity?

Как настроить в приложении Unity возможность выбора цветовой схемы пользователем и реализовать изменение цветов кнопок, панелей и других элементов интерфейса в соответствии с выбранной схемой?
  • 3 июля 2024 г. 9:42
Ответы на вопрос 2
1. Создание двух цветовых схем (светлой и темной) в редакторе Unity: 

- Создайте два набора цветовых переменных для каждой схемы, например, LightTheme и DarkTheme.
- Назначьте каждому элементу интерфейса нужный цвет из соответствующего набора цветов.

2. Создание настроек для выбора цветовой схемы в приложении:

- Создайте меню настроек или панель выбора темы, где пользователь может выбрать светлую или темную цветовую схему.
- Добавьте функционал для сохранения выбранной темы (например, с помощью PlayerPrefs).

3. Реализация изменения цвета элементов интерфейса:

- В скрипте установите проверку выбранной цветовой схемы (например, через PlayerPrefs).
- В зависимости от выбранной схемы, присваивайте нужные цвета элементам интерфейса из набора LightTheme или DarkTheme.
- Обновляйте цвета элементов при смене выбранной темы.

Пример кода:

```csharp
public class ThemeManager : MonoBehaviour
{
    public Color[] LightThemeColors;
    public Color[] DarkThemeColors;

    private void Start()
    {
        int selectedTheme = PlayerPrefs.GetInt("SelectedTheme", 0);

        if(selectedTheme == 0)
        {
            SetThemeColors(LightThemeColors);
        }
        else
        {
            SetThemeColors(DarkThemeColors);
        }
    }

    public void SetTheme(int themeIndex)
    {
        PlayerPrefs.SetInt("SelectedTheme", themeIndex);

        if(themeIndex == 0)
        {
            SetThemeColors(LightThemeColors);
        }
        else
        {
            SetThemeColors(DarkThemeColors);
        }
    }

    private void SetThemeColors(Color[] colors)
    {
        // Присваивание цветов элементам интерфейса
        // Например, изменение цветов кнопок, панелей и текста
    }
}
```

Этот код позволяет выбрать цветовую схему и применить соответствующие цвета к элементам интерфейса в зависимости от выбора пользователя.
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TMPro;

public class MenuColor : MonoBehaviour
{
    [SerializeField] Image _backGround; //Добавляем фон в инспекторе
    [SerializeField] List<Button> _buttons; //добавляем кнопки в инспекторе
    private void Start()
    {
        DarkMode();
    }
    public void DarkMode()
    {
        _backGround.color = Color.black;                                           // Меняет цвет бекграунда
        for(int i=0;i<_buttons.Count;i++) 
        {
            _buttons[i].GetComponent<Image>().color = Color.white;                          // обводка кнопки 
            _buttons[i].transform.GetChild(0).GetComponent<Image>().color = Color.black;    //цвет кнопки 
            TextMeshProUGUI text = _buttons[i].transform.GetChild(1).GetComponent<TextMeshProUGUI>();//цвет шрифта кнопки
           text.color = Color.white;
            text.faceColor=Color.white;
        
        }
    }
    public void WhiteMode()
    {
        _backGround.color = Color.white;
        for (int i = 0; i < _buttons.Count; i++)
        {
            _buttons[i].GetComponent<Image>().color = Color.black;
            _buttons[i].transform.GetChild(0).GetComponent<Image>().color = Color.white;
            TextMeshProUGUI text = _buttons[i].transform.GetChild(1).GetComponent<TextMeshProUGUI>();
            text.color = Color.black;
            text.faceColor = Color.black;
        }
    }
}

Кнопка (родительский объект стандартная кнопка, 1 изображение чучуть меньше кнопки 2 дочерний текст )
Похожие вопросы