Files
aego/modules/savegame/res/docs/persistence.ru.md
sanspie f22242e5aa
ci / release (push) Successful in 5m5s
ci-platforms / build (amd64, windows, windows-2022) (push) Skipped
ci-platforms / build (arm64, darwin, macos-15) (push) Skipped
ci-platforms / build (amd64, darwin, macos-15-intel) (push) Skipped
ci / checks (push) Successful in 4m41s
ci / build (amd64, linux, ubuntu-24.04) (push) Successful in 7m14s
Stage 11g2–11g3: registry texts, CLI and the site in Russian (D348)
The remaining editor strings and undo step names; component, field, enum, setting, diagnostic and Script API texts under schema.*, enum.*, setting.*, diag.* and api.*; the launcher, the in-game Settings View with a Language setting, the CLI and aego schema show --lang. Every documentation page has a .ru.md translation; the site has a full Russian tree with hreflang, a language switch and ru/llms.txt; aego docs check --lang ru. New doc.tutorial and doc.recipe icons. Fix: an animator restored by a rewind prepares its controller before the replayed step.
2026-10-25 15:31:22 +03:00

4.8 KiB
Raw Permalink Blame History

id, title
id title
save Сохранение игры

Сохранение игры

Сохранение хранит то, что вы пометили как сохраняемое, а не всю сцену. Загрузка сохранения заново загружает его сцену из проекта и затем применяет сохранение поверх неё.

В «Попробовать» скрипт Checkpoint сохраняет игру через секунду, а затем каждые несколько секунд загружает это сохранение. У зелёного шара есть компонент «Сохранение», и он возвращается туда, где был сохранён; у серого его нет, и он начинает заново из файла сцены. В «Попробовать» сохранения хранятся в памяти и пропадают, когда страница закрывается.

Пометка Что сохраняется
компонент save.Persist трансформация узла и флаг включения
sdk.Persist("field", …) для типа компонента эти поля каждого такого компонента
@persist у поля скрипта это поле каждого экземпляра скрипта
OnSave() / OnLoad() значения, которые скрипт записывает через save.Put*

Кроме того, сохранение помнит, какие узлы сцены были уничтожены, и каждый объект, созданный через scene.Spawn: его префаб, родителя, позу и сохраняемые данные.

@persist
var Coins int

func OnSave() {
  save.PutVec2("checkpoint", lastCheckpoint)
}

func OnLoad() {
  lastCheckpoint = save.GetVec2("checkpoint", node.Position())
}
Функция
save.Save(slot) записывает игру в слот в конце кадра
save.Load(slot) заново загружает сохранённую сцену и восстанавливает слот
save.Checkpoint() сохраняет в слот checkpoint
save.Autosave(seconds) сохраняет в autosave каждые заданные реальные секунды
save.Exists(slot), save.Delete(slot)
save.SetGlobalInt(key, v), save.GlobalInt(key, def) прогресс на всю игру, который несёт каждое сохранение; есть также Float, Bool, String

В именах слотов допустимы буквы, цифры, - и _. Сохранения лежат рядом с настройками игрока, в saves/ профиля.


id: save/load title: Порядок загрузки

Порядок загрузки

Загрузка сохранения пересобирает игру в фиксированном порядке. Зная порядок, вы знаете, какие значения у скрипта уже есть в Ready и OnLoad.

  1. Сцена сохранения загружается заново.
  2. Узлы сцены, которые сохранение помечает как уничтоженные, уничтожаются.
  3. Созданные объекты создаются снова со своими сохраняемыми id.
  4. Восстанавливаются трансформации, поля компонентов и поля @persist.
  5. Скрипты выполняют Ready, затем OnLoad.

Поля, восстановленные на шаге 4, уже заданы, когда выполняется Ready. Непомеченное поле берётся из сцены, как при новом запуске.

Ссылки между сохранёнными узлами сохраняются: NodeRef на узел сцены сохраняется по его id, а ссылка внутрь созданного объекта — по сохраняемому id объекта и пути внутри него.


id: save/go title: Модули

Модули

Модуль сохраняет своё состояние в секции:

r.SaveSection("mygame.quests", questSection{})

У секции есть Version, Save(world, w), Load(world, r) и Migrate(node, from, to). Migrate выполняется, когда сохранение записано другой версией секции. Секции модулей, которые не загружены, сохраняются и записываются обратно без изменений.