UI и Ввод Unity: Как игрок взаимодействует с игрой
Начало - Понимание Unity и C#
UI (интерфейс) и Input (ввод) — это мост между игроком и вашим игровым миром. Без хорошего UI игрок не поймет, сколько у него здоровья. Без правильного Input управление будет казаться «ватным». В современном Unity эти две системы тесно связаны через EventSystem — невидимый диспетчер, который распределяет клики, касания и нажатия клавиш по нужным объектам.
🖼️ Часть 1. UI — Интерфейс пользователя
⚠️ Забудьте про OnGUI!
Метод
OnGUI из старых версий Unity устарел. Он работает медленно, не поддерживает адаптивность и используется только для отладочных оверлеев. Современный UI строится через Canvas и систему uGUI (Unity UI).📐 Canvas — король интерфейса
Canvas — это специальный компонент-контейнер, внутри которого рисуются все UI-элементы.🧱 Основные UI-компоненты
csharp
🎯 TextMeshPro — золотой стандарт текста
Забудьте про старый
Text компонент. TextMeshPro (TMP) дает:- ✅ Четкий текст на любом разрешении (SDF-шрифты)
- ✅ Поддержку эмодзи и спецсимволов
- ✅ Rich Text (цвета, жирный, ссылки внутри текста)
- ✅ Анимации и эффекты (outline, glow, shadow)
csharp
🎮 Часть 2. Input — Система ввода
📜 Две эпохи ввода в Unity
🔴 Legacy Input Manager (Старая система)
Edit -> Project Settings -> Input Manager
- ✅ Простая, работает "из коробки"
- ❌ Жесткая привязка к клавишам
- ❌ Плохо работает с геймпадами и мобильными устройствами
- ❌ Проверка каждый кадр (
if (Input.GetKey...))
csharp
🟢 New Input System (Современный стандарт)
Устанавливается через Package Manager
- ✅ Событийная модель (не нужно опрашивать каждый кадр)
- ✅ Кроссплатформенность (клавиатура, геймпад, тач, VR-контроллеры)
- ✅ Action-based (действия, а не клавиши)
- ✅ PlayerInput компонент для быстрой настройки
csharp
⚡ Часть 3. EventSystem — Невидимый диспетчер
EventSystem автоматически добавляется на сцену при создании Canvas. Он отвечает за:
- 🔍 Определение, какой UI-элемент находится под курсором/пальцем
- 📡 Распределение событий (клики, наведения, перетаскивания)
- 🎯 Работу с Raycasters (лучами, которые "щупают" UI)
🎯 Интерфейсы событий (IPointerClickHandler и другие)
Вместо того чтобы вешать
Button на всё подряд, любой объект с Collider или Image может стать кликабельным через интерфейсы:csharp
🔧 Основные интерфейсы EventSystem
💡 Шпаргалка: "Что использовать и где?"
⚠️ Золотые правила UI и Input
- Всегда используйте TextMeshPro вместо старого
Text— это стандарт индустрии с 2018 года. - Используйте New Input System для новых проектов — Legacy официально deprecated.
- Не опрашивайте Input каждый кадр (
Input.GetKey) — используйте событийную модель (context.performed). - Для UI-кликов используйте интерфейсы (
IPointerClickHandler), а неOnMouseDown(он работает только с 3D-коллайдерами и камерой). - Кэшируйте ссылки на UI-элементы в
Awakeили через[SerializeField]— не ищите их черезGetComponentвUpdate. - Используйте Canvas Scaler для адаптивности — настройте
Scale With Screen Sizeи выберите референсное разрешение (например, 1920x1080). - Для сложных UI используйте Layout Groups (
VerticalLayoutGroup,GridLayoutGroup) — они автоматически расставляют элементы. - Не смешивайте UI и 3D-мир без необходимости — World Space Canvas должен использоваться только для внутриигровых интерфейсов (экраны, голограммы).
🚀 Pro-совет: ScriptableObjects для UI
Храните настройки UI (цвета, размеры шрифтов, стили кнопок) в ScriptableObjects. Это позволит дизайнеру менять внешний вид игры без правки кода и создания префабов для каждой кнопки.
csharp
Комментарии
Отправить комментарий