Перейти к содержимому

Выбор интерфейсного API

В KILLSCRIPT есть три основных способа показать собственный интерфейс. Они решают разные задачи.

Инструмент Подходит для Принцип работы
ImGui Быстрый HUD, текст, изображения, отладка Содержимое рисуется заново каждый кадр
UI + UXML/USS Панели, меню, списки, кнопки Создаётся постоянное дерево элементов
WorldVisuals Линии и области внутри игрового мира Объекты существуют в мировых координатах
  • нужно вывести несколько строк или изображение;
  • содержимое часто меняется;
  • взаимодействие мышью не требуется;
  • нужен быстрый прототип.
Scheduler:OnFrame(function()
ImGui:DrawDebugText("Ping: " .. tostring(NetworkInfo.Ping))
end)
  • интерфейс содержит контейнеры, списки или формы;
  • нужны кнопки, поля ввода и прокрутка;
  • оформление удобнее держать в USS;
  • элементы должны сохраняться между кадрами.
local root = UI:BuildFromUxmlAbsolute("Panel.uxml")

UXML создаётся один раз. В дальнейшем Lua меняет свойства уже существующих элементов.

  • линия должна соединять мировые точки;
  • область должна лежать на поверхности карты;
  • визуализация относится к позиции объекта, а не к экрану.
local line = WorldVisuals:CreateLineRenderer()
line:SetPositionCount(2)
line:SetPosition(0, Vector3.zero)
line:SetPosition(1, Vector3.up)

Один модуль может использовать все три подхода: UXML для настроек, ImGui для лёгкого HUD и WorldVisuals для объектов на карте. Важно не дублировать одну информацию несколькими слоями и явно удалять временные элементы.

Дальше: первый HUD на ImGui, первый UXML-интерфейс и справочник WorldVisuals. Использованные в примерах типы описаны на страницах Scheduler, NetworkInfo и Vector3.