Друкарня від WE.UA

Unity Tab System

Unity має величезну кількість корисних та крутих UI-фіч. Але не вистачає однієї, яка допомогає зручно та логічно організовувати елементи у вкладинки.

Сьогодні ми створимо базову систему табів для Unity, яку кожен з вас потім зможе розширити під свої потреби. Починаємо)

*Традиційний дизклеймер: рішення та код можуть бути не найкращими, тож для когось це буде гайд, а для когось план «як робити не треба». Також головна ціль статті — показати, що і як просто можна створити засобами юніті. Тож не судіть строго)*

Приклади вкладинок у ігрових UI

Перш за все визначимося з необхідними елементами. Нам треба:

1)      Кнопки(кастомні, чи дефолтні), щоб перемикати вкладинки

2)      GameObject-контейнер, фактично сам таб

3)      Менеджер, який контролюватиме що треба вмикати/вимикати

Отже нам треба 2 чи 3 скрипти, залежно від реалізації кнопок. Особисто я обрав дефолтні юнітівські Button, щоб швидко все накидати.

Почнемо зі скрипту TabGroup. В ньому ми повинні мати всі таби(лист _tabs), які належать до цієї групи, і метод, щоб перемикати вкладинки(OnTabEnter()):

public class TabGroup : MonoBehaviour
{
    [SerializeField] private List<Tab> _tabs;
    
    private void OnEnable()
    {
        foreach (Tab tab in _tabs)
        {
            tab.Initialize();
            tab.OnTabInteracted += OnTabEnter;
        }
    }

    private void OnDisable()
    {
        foreach (Tab tab in _tabs)
        {
            tab.Uninitialize();
            tab.OnTabInteracted -= OnTabEnter;
        }
    }

    private void OnTabEnter(Tab tab)
    {
        ResetAllTabs();
        
        tab.gameObject.SetActive(true);
    }

    private void ResetAllTabs(bool state = false)
    {
        foreach (Tab tab in _tabs)
            tab.gameObject.SetActive(state);
    }
}

В OnEnable() я ініціалізую таби та підписуюсь на їх івент, щоб менеджер знав коли користувач перемикається та світчив таби. Відповідно OnDisable робить протилежне, щоб ніде випадково не отримати null ref.

OnTabEnter перш за все вимикає всі наявні вкладинки групи, потім вмикає необхідну.

От і вся структура менеджеру, погнали далі!

В самому класі Tab нам треба небагато: івент, який передаватиме клікнуту вкладинку в менеджер, та кнопку, яка прив’язана до цієї вкладинки.

public class Tab : MonoBehaviour
{
    public event Action<Tab> OnTabInteracted;
    
    [SerializeField] private Button _connectedButton;

    public void Initialize()
    {
        _connectedButton.onClick.AddListener(TabInteracted);
    }

    public void Uninitialize()
    {
        _connectedButton.onClick.RemoveListener(TabInteracted);
    }

    private void TabInteracted()
    {
        OnTabInteracted?.Invoke(this);
    }
}

Методи Initialize та Uninitialize просто підписуються на події від Button, щоб клік на кнопку інвокав івент через метод TabInteracted.

От і вся магія коду)

Далі я накидав простенький UI, та прив'язав компоненти одне до одного. Сцена виглядає приблизно так:

Самостійно ви все можете пощупати з мого гітхабу: https://github.com/DaniilCoolUkraine/TabSystemUnity/tree/develop

Ну а за ідею хочу подякувати Game Dev Guide (посилання на відос)

Дякую за прочитання і най з вами буде сила чистого коду) Зустрінемось в рекомендаціях!

Статті про вітчизняний бізнес та цікавих людей:

  • CRM keyCRM: зручне рішення для продажів, комунікацій і керування командою

    Успіх компанії залежить від того, наскільки швидко вона здатна опрацьовувати вхідні запити. Коли дані про клієнтів розпорошені між різними месенджерами, виникає хаос. CRM keyCRM пропонує вихід із цієї ситуації, об’єднуючи всі робочі процеси в єдиному зручному інтерфейсі.

    Теми цього довгочиту:

    Crm
  • Різниця між UX і UI, яку варто зрозуміти ще до першого заняття

    Більшість людей, які обирають професію UX чи UI, довго вважають це одним і тим самим. Насправді це два різних підходи до роботи над продуктом, і плутанина між ними гальмує розвиток ще на старті.

    Теми цього довгочиту:

    Ui-ux
  • Логіка змін: як SEO оптимізація прибирає бар’єри до зростання

    Багато компаній приходять у SEO з очікуванням швидкого ривка, але дійсний ефект починається там, де сайт перестають латати точково. Тому в центрі роботи стоїть не окрема дія, а послідовні зміни. Оптимізація сайту має прибирати системні перешкоди, а не маскувати їх новими текстами

    Теми цього довгочиту:

    Seo
  • Музичний футуризм: неймовірні інструменти XXI століття

    Еволюція музичних інструментів це один із найкрутіших проявів потужності людської уяви і потреби виразити себе через мистецтво. І хоча багато традиційних інструментів майже не змінилися за століття існування, інновації і пошук не зупиняються.

    Теми цього довгочиту:

    Музичні Інструменти
  • Стіл – всьому голова? Так, якщо його правильно підібрати

    Коли починаєш вивчати пропозицію меблевих фабрик щодо столів, дивуєшся кількості варіантів, адже вони пропонують різні розміри, різні матеріали, різноманітні форми та дизайни. Скористайтесь нашим каталогом MebelOK, щоб Ви могли підібрати найкращу модель для Вашого приміщення

    Теми цього довгочиту:

    Столи
Поділись своїми ідеями в новій публікації.
Ми чекаємо саме на твій довгочит!
Ukrainian dev
Ukrainian dev@UkrainianDev

Інді розробник ігор

1Довгочити
53Перегляди
1Підписники
На Друкарні з 16 червня 2023

Це також може зацікавити:

Коментарі (0)

Підтримайте автора першим.
Напишіть коментар!

Це також може зацікавити: