Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Unity атлас, смена интерфейса, Не смена окон, интерфейс кнопкок и окон

Валек Журавлев Гуру (3260), открыт 2 недели назад
Я даже нейронку спрашивал пишет фигню. 2д игра.

Короче есть atlas 1 и altas 2.
В атласе 1 = все объекты с меню
В атласе 2 = все объекты с меню, но с другим дизаном.

Грубо говоря при нажатии на кнопку менять дизайн всех кнопок и панелей, на те что в атласе 2. Прям все. Если атласе 1 = 10 кнопок, то в атласе 2 тоже 10 кнонок. И названия тоже одинаковые, разный только пут и дизайн.

Вот как по кнопке поменять дизайн кнопок?

Я устал гуглить, в годот просто атлас меняешь и все, а тут нет. Не менять же мне по одной кнопке?
2 ответа
Лев Перфилов Мыслитель (7714) 2 недели назад
В один пустой gameobject объединить все кнопки одного стиля, затем в другой пустой gameobject объединить все кнопки другого стиля. А из когда переключать состояние этих двух gameobject'ов
Валек ЖуравлевГуру (3260) 2 недели назад
не работает так у меня 1 кнопка в меню корая переключает, мне не нужны активные все
Лев Перфилов Мыслитель (7714) Валек Журавлев, Сформулируй вопрос ещё раз.
Татьяна Просветленный (28664) 2 недели назад
В Unity для смены атласа спрайтов всех элементов интерфейса можно использовать скрипт, который будет проходить по всем кнопкам и панелям и менять их спрайты. В данном случае, мы можем создать структуру, в которой будем хранить соответствие между спрайтами из атласа 1 и атласа 2, и по нажатию на кнопку менять спрайты всех элементов.

Предположим, у нас есть два атласа с одинаковыми именами спрайтов, но разными путями. Мы будем использовать словарь для хранения соответствий.

как можно это реализовать:

Создайте словарь для хранения спрайтов из обоих атласов.

Напишите метод, который будет проходить по всем кнопкам и панелям и заменять их спрайты на спрайты из другого атласа.

Добавьте кнопку, которая будет вызывать этот метод для смены интерфейса.
код на C# для Unity:
 using UnityEngine; 
using UnityEngine.UI;
using System.Collections.Generic;

public class UIAtlasSwitcher : MonoBehaviour
{
public SpriteAtlas atlas1;
public SpriteAtlas atlas2;
private Dictionary spriteMap1 = new Dictionary();
private Dictionary spriteMap2 = new Dictionary();
private bool isAtlas1Active = true;

void Start()
{
LoadSprites(atlas1, spriteMap1);
LoadSprites(atlas2, spriteMap2);
}

void LoadSprites(SpriteAtlas atlas, Dictionary spriteMap)
{
Sprite[] sprites = new Sprite[atlas.spriteCount];
atlas.GetSprites(sprites);
foreach (var sprite in sprites)
{
spriteMap[sprite.name] = sprite;
}
}

public void SwitchAtlas()
{
isAtlas1Active = !isAtlas1Active;
SpriteAtlas targetAtlas = isAtlas1Active ? atlas1 : atlas2;
Dictionary targetSpriteMap = isAtlas1Active ? spriteMap1 : spriteMap2;

Button[] buttons = FindObjectsOfType
Чтобы это работало, убедитесь, что у вас настроены атласы и в них спрайты имеют одинаковые имена.

Шаги по настройке:
Создайте два атласа и добавьте в них соответствующие спрайты.
В редакторе Unity добавьте этот скрипт на любой GameObject.
В инспекторе добавьте ссылки на ваши атласы в поля atlas1 и atlas2.
Добавьте кнопку на сцену и назначьте метод SwitchAtlas на её событие OnClick.
Теперь, при нажатии на эту кнопку, дизайн всех кнопок и панелей будет меняться между двумя атласами.
Валек ЖуравлевГуру (3260) 2 недели назад
вроде так нейронка отвечала бред немного
Валек ЖуравлевГуру (3260) 2 недели назад
я не хочу чтобы в моей 2д игре было 10 фпс
Похожие вопросы