Как лучше сделать переключение тем?

89
04 мая 2021, 16:40

У меня есть игра в которой я хочу реализовать возможность смены темы игры, но для этого нужно для каждого элемента присваивать отделенный спрайт, но как лучше это сделать, как лучше сделать возможность получить доступ ко всем спрайтам? Как я понимаю, отдельный массив всех спрайтов для каждого элемента, объявленный в скрипте, будет не самым лучшим решением...

Answer 1

Массивы спрайтов принято паковать в специальные атласы - Sprite Atlas. Процедура "извлечения" спрайтов из атласа - SpriteAtlas.GetSprites, дальнейший доступ к конкретным спрайтам осуществляется через индексы в обычном массиве. Это значит, что и код для получения конкретных спрайтов будет идентичен.

Учитывая эту реализацию, можно паковать UI темы в отдельные атласы и сменять эти атласы в зависимости от выбранной темы:

// Сменяемый атлас
[SerializeField]
SpriteAtlas uiAtlas;
void SetUiTheme(){
    var uiSprites = new Sprite[uiAtlas.spriteCount];
    uiAtlas.GetSprites(uiSprites);
    // доступ к спрайтам по индексам
    // uiSprites[0], uiSprites[1], и т.д.
}
READ ALSO
Работа с двумя мониторами Wpf MVVM

Работа с двумя мониторами Wpf MVVM

Можете подсказать, вот у меня есть 2 монитора и мне нужно по нажатию кнопки перенести окно WPF на другой монитор и при повторном нажатии кнопки...

70
Создание нескольких picturebox

Создание нескольких picturebox

Разрабатываю игру flappy bird, столкнулся с такой проблемой, что не могу прорисовать трубы(PictureBox)Написал код для прорисовки труб, создал массивы,...

91
Хранение соли пароля

Хранение соли пароля

Где её хранить и в каком виде? В базе данных, в отдельной строке в таблице Users?

84
c# npgsql: Вылетает исключение

c# npgsql: Вылетает исключение

В разных функция запрашиваю данные из БД

102