Написание скриптов на C# в Godot. Отличия API C# от GDScript
Это (неполный) список различий API между C# и GDScript.
Основные различия
Как объясняется во введении, C# обычно использует PascalCase вместо snake_case, который используется в GDScript и C++.
Global scope
Доступен под Godot.GD. Некоторые вещи были перемещены в их собственные классы, такие как Math и Random. См. ниже.
Глобальные функции, такие как print, var2str и weakref, расположены под GD в C#.
ERR_* константы были перемещены в Godot.Error.
Math
Математические функции, такие как abs, acos, asin, atan и atan2, расположены под Mathf как Abs, Acos, Asin, Atan и Atan2, а не в global scope. PI это Mathf.Pi
Random
Функции случайности, такие как rand_range и rand_seed, расположены в Random, поэтому используйте Random.RandRange вместо rand_range.
Ключевое слово Export
Используйте атрибут [Export] вместо ключевого слова export в GDScript.
Ключевое слово Signal
Используйте атрибут [Signal] вместо ключевого слова signal в GDScript. Этот атрибут должен использоваться для делегата, чья подпись имени будет использоваться для определения сигнала.
[Signal] delegate void MySignal(string willSendsAString);
См. также: C# signals
Singletons
Используйте System.String (string). Все методы Godot String предоставляются классом StringExtensions как методы расширения. Пример:
string upper = "I LIKE SALAD FORKS"; string lower = upper.ToLower();
Однако есть несколько отличий:
erase: Строки неизменны в C#, поэтому мы не можем изменить строку, переданную методу расширения. По этой причинеEraseбыл добавлен в качестве метода расширенияStringBuilderвместо строки. В качестве альтернативы вы можете использоватьstring.Remove.IsSubsequenceOf/IsSubsequenceOfi: предоставляется дополнительный метод, который представляет собой перегрузкуIsSubsequenceOf, позволяющую вам явно указать чувствительность к регистру:
str.IsSubsequenceOf("ok"); // Case sensitive
str.IsSubsequenceOf("ok", true); // Case sensitive
str.IsSubsequenceOfi("ok"); // Case insensitive
str.IsSubsequenceOf("ok", false); // Case insensitive
Match/Matchn/ExprMatch: помимоMatchиMatchnпредоставляется дополнительный метод, который позволяет явно указать чувствительность к регистру:
str.Match("*.txt"); // Case sensitive
str.ExprMatch("*.txt", true); // Case sensitive
str.Matchn("*.txt"); // Case insensitive
str.ExprMatch("*.txt", false); // Case insensitive
Basis
Структуры не могут иметь конструкторов без параметров в C#. Следовательно, new Basis() инициализирует все примитивные элементы к их значению по умолчанию. Используйте Basis.Identity для эквивалента Basis() из GDScript и C++.
Следующий метод был преобразован в свойство с другим именем:
Transform2D
Структуры не могут иметь конструкторов без параметров в C#. Таким образом, new Transform2D() инициализирует все примитивные элементы к их значению по умолчанию. Пожалуйста, используйте Transform2D.Identity для эквивалента Transform2D() из GDScript и C++.
Следующие методы были преобразованы в свойства с соответствующими именами:
Plane
Следующий метод был преобразован в свойство с немного другим именем:
Rect2
Следующее поле было преобразовано в свойство с немного другим именем:
Следующий метод был преобразован в свойство с другим именем:
Quat
Структуры не могут иметь конструкторов без параметров в C#. Таким образом, new Quat() инициализирует все примитивные элементы к их значению по умолчанию. Пожалуйста, используйте Quat.Identity для эквивалента Quat() из GDScript и C++.
Массивы (Array)
Это временно. Массив пересчитан, так что ему нужен собственный тип, который переносит нативную сторону. PoolArrays также понадобится использовать их собственный тип так, как они предназначены.
В некоторых исключениях необязательный массив (type[]) может потребоваться вместо List.
Словарь (Dictionary)
Это временно. Массив пересчитан, так что ему нужен собственный тип, который переносит нативную сторону.
Используйте Dictionary<object, object>.
Общение с другими ЯП скриптов
Методы object Object.call(string method, params object[] args), object Object.get(string field) и object Object.set(string field, object value) предоставляются для взаимодействия с экземплярами других ЯП через Variant API.
Другие отличия
preload, assert и yield, также как они работают в GDScript, в настоящее время недоступны в C#.
Другие отличия: