reckfellENGINE

Пути `asset://` и `user://`

Где читать ресурсы, хранить прогресс и получать путь для System.IO.

На этой странице

Где находится файл

ПутьНазначение
asset://Props/Crate.rprefabРесурс относительно корня проекта, где лежит project.reckfell
user://io-demo/world.jsonДанные конкретного приложения и пользователя; сохраняются между запусками
C:/Games/Pack/image.pngАбсолютный путь ОС; его выбирают отдельно для текущего устройства

В путях API используйте /, включая Windows. Не записывайте прогресс в asset://: в поставке проекта ресурсы могут лежать в пакете, а папка установки — быть недоступной для записи. user:// предназначен для записываемых данных, но не гарантирует свободное место или доступ при любой настройке ОС.

В настройках сохранений храните имя слота или путь вида user://saves/slot-1.json, а не абсолютный C:/Users/.... Абсолютный путь привязан к устройству и пользователю; фактическую папку получайте при запуске.

Узнать фактическую папку

Прикрепите PathDemo.cs к обычной Entity, соберите C#-проект и запустите уровень. В Console (Alt + O) появятся корень проекта, папка пользователя и полный путь слота. В русском редакторе папку сохранений открывает Проект → Открыть папку пользовательских данных, в английском — Project → Open User Data Folder.

C#
using Reckfell;

public partial class PathDemo : Entity
{
    public override void _Ready()
    {
        ReckfellApi.Print($"Project: {ProjectSettings.GlobalizePath("asset://")}");
        ReckfellApi.Print($"User data: {OS.GetUserDataDir()}");
        ReckfellApi.Print($"Save: {ProjectSettings.GlobalizePath("user://io-demo/world.json")}");
    }
}

FileAccess и DirAccess понимают виртуальные префиксы. System.IO их не понимает: передайте ему результат ProjectSettings.GlobalizePath(). Это преобразование не извлекает содержимое ресурсного пакета на диск. Для импортированного ресурса используйте ResourceLoader, даже если известен его абсолютный исходный путь.

GlobalizePath() не создаёт вложенные папки. Перед записью в user://io-demo/... выполните DirAccess.MakeDirRecursiveAbsolute("user://io-demo") и проверьте Error.Ok. Готовый код — в файловом примере.

Настройки папки пользователя

Фактический путь возвращает OS.GetUserDataDir(). По умолчанию на Windows это %APPDATA%/Reckfell/app_userdata/<имя проекта>; папка зависит от application/config/name.

application/config/use_custom_user_dir включает отдельную папку приложения. application/config/custom_user_dir_name задаёт её имя, например Studio/Game. После изменения имени или этих настроек прежние сохранения автоматически не переезжают. Для выпущенной игры сохраните стабильное имя и отдельно спроектируйте миграцию.

ProjectSettings.LocalizePath() преобразует подходящий абсолютный путь внутри проекта в asset://. Не используйте его как обратное преобразование произвольного пути в user://: в этой версии такой контракт отсутствует. Для слотов храните виртуальный путь сразу.

Если файл не найден

Сравните фактическую папку через OS.GetUserDataDir(), имя проекта и регистр имени файла. На Windows ошибка регистра часто незаметна, на другой файловой системе она может стать причиной сбоя. Пустая подпапка не создаётся одним вызовом FileAccess.Open(). Файла при первом запуске может ещё не быть — это отдельный результат чтения, а не повод стирать другой слот.

Документация Reckfell EngineНаверх ↑
БЫСТРЫЙ ПЕРЕХОДНачало работыEntity и иерархияC# & .NET 10Сцены и префабы
Руководства и полный API Reckfell K
reckfellENGINE
RECKFELL ACCOUNT

Вход в аккаунт

Войдите в аккаунт Reckfell.

Один аккаунт для всей платформы Reckfell.