C#: свой Resource через GlobalClass
Регистрировать ShotSettings, сохранить .rdata и не путать регистрацию с Singleton.
Объявить тип
Сохраните этот класс как ShotSettings.cs с тем же регистром. Он наследуется от Resource, поэтому хранит настройки, а не занимает место в дереве Entity. Добавьте файл в существующий C#-проект и соберите. После обновления списка скриптов редактор может предложить зарегистрированный тип в создании ресурсов. Для использования в коде вызывайте обычный new ShotSettings().
ShotSettings.cs
using Reckfell;
[GlobalClass]
public partial class ShotSettings : Resource
{
[Export] public string DisplayName { get; set; } = "Pulse";
[Export(PropertyHint.Range, "1,100,1")] public int Damage { get; set; } = 12;
[Export] public Reckfell.Collections.Array<string> Tags { get; set; } = new() { "weapon" };
public bool TryGetDamage(out int damage)
{
damage = 0;
if (Damage < 1 || Damage > 100) return false;
damage = Damage;
return true;
}
}GlobalClass обозначает тип для редактора. Атрибут не создаёт общий экземпляр, не делает методы static и не заменяет автозагрузку. Два оружия могут ссылаться на один ShotSettings: изменение Damage общего ресурса влияет на обоих. Боезапас каждого оружия храните на его экземпляре, как _ammo в примере экспорта.
Сохранить и проверить
ResourceSaver.Save(settings, "user://shot-settings.rdata") возвращает Error: проверьте его перед загрузкой. ResourceLoader.Load<ShotSettings> возвращает типизированный ресурс; обработайте null. Для проверки чтения именно с диска, а не из общего кэша, укажите CacheMode.Ignore. Это отдельный экземпляр; обычная загрузка может использовать кэш.
В комплектном стенде проверены сохранение, чтение имени/урона/тегов и восстановление C#-типа. Импорт редактором без интерфейса регистрирует ShotSettings с базовым Resource в GetGlobalClassList. Это не проверка действий пользователя в диалоге Create Resource.
Если тип не появился
Проверьте успешную сборку, точное совпадение ShotSettings.cs и ShotSettings, атрибут GlobalClass и наследование от ReckfellObject. Обычный C#-класс с атрибутом даёт RF0401; generic-класс — RF0402. Не добавляйте GlobalClass к InventoryLedger: обычная модель данных в этом не нуждается. После переименования файла исправьте класс и ссылки, затем пересоберите проект; одна регистрация не переносит существующие ресурсы автоматически.