Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
Навігація з клавіатури/контролера та фокус
Загальною вимогою для користувацького інтерфейсу є повна підтримка клавіатури та контролера для навігації та взаємодії. Існує дві основні причини, чому це корисно для проектів: покращена доступність (не всі можуть використовувати мишу або сенсорне керування для взаємодії) та підготовка вашого проекту до консолей (або просто для тих, хто віддає перевагу грі з контролером на ПК).
Навігація між елементами інтерфейсу користувача за допомогою клавіатури або контролера здійснюється шляхом зміни активного вибраного вузла. Це також називається зміною фокусу інтерфейсу користувача. Кожен вузол Control у Godot може мати фокус. За замовчуванням деякі вузли керування мають можливість автоматично перехоплювати фокус, реагуючи на вбудовані дії інтерфейсу користувача, такі як ui_up, ui_down, ui_focus_next тощо. Ці дії можна побачити в проекті параметри на карті введення та можуть бути змінені.
Попередження
Оскільки ці дії використовуються для фокусування, їх не слід використовувати для коду ігрового процесу.
Налаштування вузла
На додаток до вбудованої логіки, ви можете визначити так звані сусіди по фокусу для кожного окремого керуючого вузла. Це дозволяє точно налаштувати шлях фокусування інтерфейсу користувача через інтерфейс користувача вашого проекту. Параметри для окремих вузлів можна знайти в доці «Інспектор» у категорії «Фокус» розділу «Керування».
Параметри сусідів використовуються для визначення вузлів для 4-направленої навігації, наприклад за допомогою клавіш зі стрілками або D-pad на контролері. Наприклад, нижній сусід буде використано під час навігації вниз за допомогою стрілки вниз або натискання D-pad. Параметри «Далі» та «Попередній» використовуються разом із кнопкою переміщення фокусу, наприклад Tab в операційних системах для настільних пк.
Примітка
Вузол може втратити фокус, якщо він стане прихованим.
Налаштування режиму визначає спосіб фокусування вузла. Усі означає, що вузол можна сфокусувати, клацнувши його мишею або вибравши за допомогою клавіатури чи контролера. Натиснути означає, що на ньому можна сфокусуватися, лише клацнувши його. Нарешті, Немає означає, що його взагалі неможливо сфокусувати. Різні керуючі вузли мають різні параметри за замовчуванням для цього залежно від того, як вони зазвичай використовуються, наприклад, для вузлів Label за замовчуванням встановлено значення «Немає», а для buttons встановіть «Все».
Обов’язково правильно налаштуйте сцени для фокусування та навігації. Якщо вузол не має налаштованого сусіда по фокусу, система намагатиметься автоматично вгадати наступний елемент керування. Це може призвести до ненавмисної поведінки, особливо в складному інтерфейсі користувача, який не має чітко визначеного вертикального чи горизонтального потоку навігації.
Необхідний код
Для коректної роботи навігації за допомогою клавіатури та контролера будь-який вузол має бути сфокусований за допомогою коду під час запуску сцени. Без цього натискання кнопок або клавіш нічого не дасть.
Ви можете використовувати метод Control.grab_focus() для фокусування елемента керування. Ось базовий приклад встановлення початкового фокуса за допомогою коду:
func _ready():
$StartButton.grab_focus.call_deferred()
public override void _Ready()
{
GetNode<Button>("StartButton").GrabFocus.CallDeferred();
}
Тепер, коли сцена починається, вузол "Кнопка запуску" буде у фокусі, і для навігації між ним та іншими елементами інтерфейсу можна буде використовувати клавіатуру або контролер.