Files
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

71 lines
4.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
id: save
title: Сохранение игры
---
# Сохранение игры
Сохранение хранит то, что вы пометили как сохраняемое, а не всю сцену. Загрузка сохранения заново загружает его сцену из проекта и затем применяет сохранение поверх неё.
В «Попробовать» скрипт 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` выполняется, когда сохранение записано другой версией секции. Секции модулей, которые не загружены, сохраняются и записываются обратно без изменений.