API различия C# и GDScript¶
Это (неполный) список различий API между C# и GDScript.
Общие отличия¶
Как объясняется в Основы C#, C# обычно использует PascalCase вместо``snake_case``, используемого в GDScript и C++.
Глобальная область¶
Глобальные функции и некоторые константы пришлось перенести в классы, поскольку C# не позволяет объявлять их в пространствах имен. Большинство глобальных констант были перенесены в их собственные перечисления.
Константы¶
Глобальные константы были перенесены в собственные перечисления. Например, константы ERR_ * были перемещены в перечисление Error.
Особые случаи:
GDScript код |
C# |
|---|---|
|
|
|
|
|
|
Математические функции¶
Глобальные математические функции, такие как abs, acos, asin, atan и atan2, расположены под Mathf как Abs, Acos, Asin, Atan и Atan2. Константу PI можно найти как Mathf.Pi.
Случайные функции¶
Случайные глобальные функции, такие как rand_range и rand_seed, расположены под GD. Пример: GD.RandRange и GD.RandSeed.
Другие функции¶
Многие другие глобальные функции, такие как print и var2str, расположены в GD. Пример: GD.Print и GD.Var2Str.
Исключения:
GDScript код |
C# |
|---|---|
|
|
|
|
Советы¶
Иногда может быть полезно использовать директиву using static. Эта директива позволяет получить доступ к членам и вложенным типам класса без указания имени класса.
Пример:
using static Godot.GD;
public class Test
{
static Test()
{
Print("Hello"); // Instead of GD.Print("Hello");
}
}
Ключевое слово Export¶
Используйте атрибут [Export] вместо ключевого слова GDScript export. Этот атрибут также может быть предоставлен с необязательными параметрами PropertyHint и hintString. Значения по умолчанию могут быть установлены путём присвоения значения.
Пример:
using Godot;
public class MyNode : Node
{
[Export]
private NodePath _nodePath;
[Export]
private string _name = "default";
[Export(PropertyHint.Range, "0,100000,1000,or_greater")]
private int _income;
[Export(PropertyHint.File, "*.png,*.jpg")]
private string _icon;
}
Ключевое слово Signal¶
Используйте атрибут [Signal] для объявления сигнала вместо ключевого слова GDScript signal. Этот атрибут должен использоваться для делегата, чья подпись имени будет использоваться для определения сигнала.
[Signal]
delegate void MySignal(string willSendsAString);
См. также: Сигналы C#.
ключевое слово onready¶
GDScript обладает возможностью отложить инициализацию переменной-члена до тех пор, пока функция ready не будет вызвана с помощью`onready` (см. ключевое слово onready). Например:
onready var my_label = get_node("MyLabel")
Однако C# не имеет такой возможности. Чтобы достигнуть такого эффекта вы должны сделать это.
private Label _myLabel;
public override void _Ready()
{
_myLabel = GetNode<Label>("MyLabel");
}
Синглтоны¶
Синглтоны доступны как статические классы, а не как шаблон синглтона. Это сделано для того, чтобы сделать код менее подробным, чем это было бы со свойством `` Instance``.
Пример:
Input.IsActionPressed("ui_down")
Однако в некоторых очень редких случаях этого недостаточно. Например, вы можете захотеть получить доступ к члену из базового класса Godot.Object, например Connect. Для таких случаев использования мы предоставляем статическое свойство с именем Singleton, которое возвращает экземпляр singleton. Тип этого экземпляра - Godot.Object.
Пример:
Input.Singleton.Connect("joy_connection_changed", this, nameof(Input_JoyConnectionChanged));
Строки¶
Используйте System.String (string). Большинство методов Godot для работы со строками предоставляются классом 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
Базис¶
Структуры не могут иметь конструкторов без параметров в C#. Следовательно, new Basis () инициализирует все примитивные члены их значением по умолчанию. Используйте Basis.Identity для эквивалента Basis () в GDScript и C++.
Следующий метод был преобразован в свойство с другим именем:
GDScript код |
C# |
|---|---|
|
|
Transfоrm2D¶
Структуры не могут иметь конструкторов без параметров в C#. Следовательно, new Transform2D() инициализирует все примитивные члены их значением по умолчанию. Пожалуйста, используйте Transform2D.Identity для эквивалента Transform2D() в GDScript и C++.
Следующие методы были преобразованы в свойства с соответствующими именами:
GDScript код |
C# |
|---|---|
|
|
|
|
Плоскость¶
Следующий метод был преобразован в свойство с немного другим именем:
GDScript код |
C# |
|---|---|
|
|
Rеct2¶
Следующее поле было преобразовано в свойство с немного другим именем:
GDScript код |
C# |
|---|---|
|
|
Следующий метод был преобразован в свойство с другим именем:
GDScript код |
C# |
|---|---|
|
|
Кват¶
Структуры не могут иметь конструкторов без параметров в C#. Следовательно, new Quat() инициализирует все примитивные члены их значением по умолчанию. Пожалуйста, используйте Quat.Identity для эквивалента Quat() в GDScript и C++.
Следующие методы были преобразованы в свойство с другим именем:
GDScript код |
C# |
|---|---|
|
|
|
|
Массив¶
*Это временно. PoolArrays нуждаются в их собственных типах чтобы ими можно было пользоваться так как было задумано. *
GDScript код |
C# |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Godot.Collections.Array <T> `` является типобезопасной оболочкой для ``Godot.Collections.Array. Используйте конструктор Godot.Collections.Array <T> (Godot.Collections.Array) для его создания.
Словарь¶
Используйте Godot.Collections.Dictionary.
Godot.Collections.Dictionary <T> `` является типобезопасной оболочкой вокруг ``Godot.Collections.Dictionary. Используйте конструктор Godot.Collections.Dictionary <T> (Godot.Collections.Dictionary) для его создания.
Вариант¶
System.Object (`` object``) используется вместо Variant.
Общение с другими языками сценариев¶
Это подробно объясняется в Меж-языковые сценарии (скрипты).
Приостановить¶
Нечто похожее на yield в GDScript с одним параметром может быть достигнуто с помощью ключевого слова yield C#.
Эквивалент выхода по сигналу может быть достигнут с помощью async / await и Godot.Object.ToSignal.
Пример:
await ToSignal(timer, "timeout");
GD.Print("After timeout");
Другие различия¶
preload, так как он работает в GDScript, недоступен в C#. Вместо этого используйте GD.Load или ResourceLoader.Load.
Другие отличия:
GDScript код |
C# |
|---|---|
|
|
|
|
|
|
|
TODO |
|
TODO |