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

Texture

API Textures загружает изображения из папки images текущего модуля. Полученный объект Texture можно вывести через UI или ImGui, а также получить из других API — например, через Camera.OutputTexture.

Textures доступен только в клиентской Lua-части. В server.lua Reflex-модуля этот глобальный объект равен nil.

Загрузчик модуля разрешает путь внутри его images, проверяет файл и декодирует изображение в клиентскую texture resource. Texture — ссылка на этот ресурс с доступными размерами; она не содержит правил размещения на экране.

Конкретный потребитель решает, как использовать текстуру: UI хранит её в элементе, ImGui добавляет команду отрисовки текущего кадра, а Camera сама производит обновляемую render texture.

  • поддерживаются .png, .jpg и .jpeg;
  • расширение обязательно указывается в пути;
  • рекомендуемый путь считается относительно папки images;
  • width и height доступны только для чтения;
  • отсутствующий или пропущенный файл возвращает nil;
  • изображение больше 4096 × 4096 или файл больше 10 МБ не загружается.

Textures:GetTexture() только загружает изображение в память и ничего не выводит на экран. Покажите полученный объект одним из способов:

  • через ImGui:DrawTexture() для быстрой экранной отрисовки;
  • в свойстве изображения элемента UI;
  • как паттерн LineRenderer.

width и height описывают размер самого ресурса. Экранный размер задаётся отдельно в Rect или стилях UI.

Положите изображения в папку images модуля. Вложенные папки поддерживаются.

MyModule/
├── images/
│ ├── Icon.png
│ └── UI/
│ └── Background.jpg
└── scripts/
└── main.lua

В Lua указывается путь внутри images:

local icon = Textures:GetTexture("Icon.png")
local background = Textures:GetTexture("UI/Background.jpg")

Префикс images/ тоже принимается, но путь относительно папки короче и не допускает случайного images/images/:

Textures:GetTexture("images/Icon.png") -- работает
Textures:GetTexture("Icon.png") -- рекомендуемый вариант

Структура примера содержит изображение images/Icon.png. Код загружает его один раз и рисует в левом верхнем углу в размере 128 × 128.

local Icon = Textures:GetTexture("Icon.png")
if Icon == nil then
print("[Texture example] images/Icon.png was not loaded")
else
Scheduler:OnFrame(function()
ImGui:DrawTexture(Icon, Rect.new(20, 20, 128, 128))
end)
end

ImGui работает в immediate mode, поэтому DrawTexture вызывается каждый кадр. Сам файл повторно загружать не нужно: храните полученный Texture в переменной.

Объект загруженного или созданного игрой изображения.

Свойство Тип Доступ Описание
width int get Ширина изображения в пикселях.
height int get Высота изображения в пикселях.

Оба свойства getter-only. Попытка присвоить им значение завершится Lua-ошибкой доступа.

local icon = Textures:GetTexture("Icon.png")
if icon ~= nil then
print("Icon size: " .. icon.width .. "x" .. icon.height)
end

Глобальный клиентский API для изображений текущего модуля.

Textures:GetTexture(path: string): Texture | nil

Возвращает загруженную текстуру или nil, если путь не найден либо изображение было пропущено загрузчиком.

Аргумент Тип Описание
path string Путь к файлу с расширением, относительно папки images.

Корректно загруженные PNG, JPG и JPEG возвращают одинаковый объектный тип Texture.

Используйте точное имя файла, расширение и прямые слеши:

Textures:GetTexture("Icon.png")
Textures:GetTexture("HUD/Weapons/Rifle.jpg")

В текущей Windows-версии загрузчик не учитывает регистр и принимает обратные слеши, но полагаться на это не стоит. Одинаковый регистр и / делают путь понятнее и устойчивее к будущим изменениям.

Путь Результат
Icon.png загрузка файла images/Icon.png
images/Icon.png также работает
Icon nil — отсутствует расширение
./Icon.png nil
Icon.png nil — пробел является частью пути
images/images/Icon.png nil — папка указана дважды

Загрузчик пропускает:

  • неизвестные расширения;
  • повреждённые изображения;
  • файлы больше 10 МБ;
  • изображения, у которых ширина или высота больше 4096 пикселей.

В этих случаях GetTexture() возвращает nil. Ограничения были подтверждены повреждённым PNG, изображением 4097 × 4097 и декодируемым PNG размером 11 000 000 байт.

Textures сканирует папку images, а не scripts. Переместите изображение в images и указывайте путь относительно неё.

Textures:GetTexture("Icon") возвращает nil. Используйте полное имя: Icon.png.

Получите Texture один раз при запуске модуля. В Scheduler:OnFrame() передавайте в UI уже сохранённый объект.