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