Решили: ввод dev-консоли всегда переводится в латиницу по позиции клавиши (KeyboardLayoutMap), независимо от раскладки ОС — решение Макса 31.07. Переводится вся строка, включая содержимое кавычек.

Почему: имена команд латинские, переключать раскладку системы игра не может, а требовать этого от разработчика — терять секунду на каждом вызове. Маппинг позиционный, а не фонетический: человек нажал клавишу G, система нарисовала «п» — значит вернуть надо g, хотя «по звуку» правильным казался бы p. Переводить только вне кавычек отвергнуто: предсказуемое правило дороже гибкости, консоль набирают на автомате.

Грабли:

  • . и , обязаны остаться вне таблицы раскладки. Позиционно им соответствуют / и ?, и с ними в таблице 0.35 превращалось в 0/35 — то есть ломался десятичный разделитель, ради которого аргументы и парсятся в инвариантной культуре. Поймал тест Layout_LatinAndDigitsPassThrough; без него дефект жил бы до первой дробной команды в бою.
  • Тема Unity клипит содержимое TextField по рамке input’а. При высоте ровно по строке первыми срезаются элементы ниже базовой линии: хвосты «g» и «p», подчёркивания в gm_sep_radius. Лечится overflow: visible на input и его текст-элементе плюс нижний padding. На общем скрине 1920×1080 это читается как «шрифт странноватый», а не как обрезка — диагноз дал увеличенный вырез области ввода (crop×3 из того же PNG). Приём стоит держать в руках: сомневаешься в пикселях — режь и увеличивай, а не гадай по стилю.
  • ScrollView.ScrollTo до привязки к панели бросает NRE (внутри спрашивает панель, можно ли скроллить). Экран наполняет вывод в Build, то есть ДО того, как навигатор добавит корень в слой — прокрутка обязана откладываться до AttachToPanelEvent и идти через schedule, иначе на самом аттаче геометрия ещё не посчитана и скролл уходит в ноль.
  • Ghost-подсказка печатает только хвост, отодвинутый пробелами. Целая дополненная строка под полем давала наложение двух текстов — символы совпадали, и ввод выглядел полужирным.
  • Потолок высоты у палитры держал скроллбар при четырёх совпадениях из четырёх (контент выше max-height на несколько пикселей). Полоса читается как «есть что-то ещё», хотя видно всё; ограничивать надо число строк, а не высоту.

Владелец правды: Assets/_Project/Scripts/Core/DevConsole/KeyboardLayoutMap.cs, Assets/_Project/Scripts/UI/DevConsole/DevConsoleScreen.cs, секция .gm-console* в Assets/_Project/UI/Theme/components.uss; тесты DevConsoleRegistryTests (раздел «Раскладка»).