Написание скриптов на 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#.
Другие отличия: