C#: имена и типы на границе API
Прямой вызов, MethodName/PropertyName, массивы .NET и точные C#-сигнатуры.
Начать с C#-объявления
Справочник показывает сигнатуру установленного SDK. Именно она определяет имя, типы, порядок аргументов и возвращаемое значение. Динамический вызов не делает допустимой произвольную функцию C# или неподдерживаемый тип данных.
| Задача | Правило |
|---|---|
| Вызвать свой C#-метод | boundary.Add(3) — обычная типизированная операция |
| Вызвать через движковый Call | Использовать ScriptBoundary.MethodName.Add и Variant-совместимые аргументы |
| Обратиться к свойству через Get/Set | Использовать соответствующий PropertyName |
| Обработать упакованный числовой массив | Следовать сигнатуре, например int[].Length |
| Применить сигнал с возвращаемыми данными | Сначала проверить сигнатуру и типы аргументов, затем EmitSignal/ToSignal |
ScriptBoundary.cs
using Reckfell;
public partial class ScriptBoundary : Entity
{
public int Count { get; private set; }
public bool Add(int amount)
{
if (amount <= 0 || Count > int.MaxValue - amount) return false;
Count += amount;
return true;
}
public bool ShowOnChild(string text)
{
Label? label = GetEntityOrNull<Label>("Status");
if (!ReckfellObject.IsInstanceValid(label)) return false;
label!.Text = text;
return true;
}
}В стенде обычный Add(2), затем Call(ScriptBoundary.MethodName.Add, 3) дают Count = 5. HasMethod("Add") — true, HasMethod("add") — false. Имена собственных C#-методов чувствительны к регистру. У встроенных методов нативное строковое имя может отличаться от C#-имени: используйте cache соответствующего класса, а не общую замену snake_case на PascalCase внутри строк.
Где нет автоматического преобразования модели
Типы .NET и движковые контейнеры не взаимозаменяемы по одному имени. Dictionary из System.Collections.Generic удобен для локального расчёта; Export и Variant требуют поддерживаемого представления. InventoryLedger.Snapshot делает эту границу явной.
Variant.Int хранит 64-битное целое, даже когда исходный C#-тип — int. Не сужайте входные данные до проверки диапазона. C#-структуры вроде Vector2 передаются как значения: правку копии свойства нужно присвоить обратно. Поведение обратных преобразований с масштабом описано в математике.
Если Call/Get/Set неожиданно не работают, проверьте успешную сборку, прикреплённый экземпляр скрипта, cache имени и фактический VariantType. Для известных типов предпочитайте прямой C#-доступ: ошибки тогда выявляет компилятор, а не только запущенный проект.