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 |