---
title: Горячая перезагрузка
brief: В этом руководстве объясняется функция горячей перезагрузки (перезагрузки на лету) в Defold.
---
# Перезагрузка ресурсов на лету
Defold позволяет выполнять горячую перезагрузку ресурсов. При разработке игры эта функция помогает значительно ускорить выполнение определенных задач. Она позволяет вам изменять код и содержимое игры во время ее работы. Типовые варианты использования:
- Для настройки параметров игрового процесса в Lua-скриптах.
- Для редактирования и настройки графических элементов (например, эффектов частиц или элементов графического интерфейса) и просмотра результатов в актуальном контексте.
- Для редактирования и настройки кода шейдера и просмотра результатов в актуальном контексте.
- Для облегчения тестирования игры путем перезапуска уровней, настройки состояния и т. д. без остановки игры.
## Как сделать горячую перезагрузку
Запустите свою игру из редактора (Project ▸ Build).
Чтобы затем перезагрузить обновленный ресурс, просто выберите пункт меню File ▸ Hot Reload или нажмите соответствующую комбинацию на клавиатуре:

## Горячая перезагрузка на устройстве
Горячая перезагрузка работает как на устройстве, так и на компьютере. Чтобы использовать её на устройстве, запустите отладочную сборку своей игры или [приложение для разработки](/manuals/dev-app) на своем мобильном устройстве, затем выберите его в качестве цели в редакторе:

Теперь при сборке и запуске редактор загружает все ассеты в работающее приложение на устройстве и запускает игру. После этого любой файл, который вы загружаете в горячем режиме, будет обновлен на устройстве.
Например, чтобы добавить пару кнопок в графический интерфейс, который отображается в запущенной игре на вашем телефоне, просто откройте файл графического интерфейса:

Добавьте новые кнопки, сохраните и перезагрузите GUI-файл в горячем режиме. Теперь вы можете видеть новые кнопки на экране телефона:

При горячей перезагрузке файла движок выведет в консоль каждый перезагруженный файл ресурсов.
## Перезагрузка скриптов
Любой перезагруженный файл Lua-скрипта будет повторно выполнен в среде исполнения Lua.
```lua
local my_value = 10
function update(self, dt)
print(my_value)
end
```
Изменение `my_value` на 11 и горячая перезагрузка файла дадут немедленный эффект:
```text
...
DEBUG:SCRIPT: 10
DEBUG:SCRIPT: 10
DEBUG:SCRIPT: 10
INFO:RESOURCE: /main/hunter.scriptc was successfully reloaded.
DEBUG:SCRIPT: 11
DEBUG:SCRIPT: 11
DEBUG:SCRIPT: 11
...
```
Обратите внимание, что горячая перезагрузка не влияет на выполнение функций жизненного цикла. Например, вызова `init()` при горячей перезагрузке не произойдёт. Однако, если вы переопределите функции жизненного цикла, будут использоваться новые версии.
## Перезагрузка Lua модулей
Пока вы добавляете переменные в глобальную область видимости в файле модуля, перезагрузка файла приведет к изменению этих глобальных переменных:
```lua
--- my_module.lua
my_module = {}
my_module.val = 10
```
```lua
-- user.script
require "my_module"
function update(self, dt)
print(my_module.val) -- hot reload "my_module.lua" and the new value will print
end
```
Распространенный паттерн модуля Lua - создать локальную таблицу, заполнить ее и затем вернуть:
```lua
--- my_module.lua
local M = {} -- a new table object is created here
M.val = 10
return M
```
```lua
-- user.script
local mm = require "my_module"
function update(self, dt)
print(mm.val) -- will print 10 even if you change and hot reload "my_module.lua"
end
```
Изменение и перезагрузка "my_module.lua" _не_ изменит поведение "user.script". См. [Руководство по модулям](/manuals/modules) для получения дополнительной информации о том, почему и как избежать этой ошибки.
## Функция on_reload()
Каждый компонент скрипта может содержать определение функции `on_reload()`. Если она существует, она будет вызываться каждый раз при перезагрузке скрипта. Это полезно для проверки или изменения данных, отправки сообщений и так далее:
```lua
function on_reload(self)
print(self.velocity)
msg.post("/level#controller", "setup")
end
```
## Перезагрузка кода шейдера
При перезагрузке вершинных и фрагментных шейдеров код GLSL перекомпилируется графическим драйвером и загружается в GPU. Если код шейдера вызывает сбой, что легко сделать, поскольку GLSL написан на очень низком уровне, это приведет к остановке движка.