C# API differences to GDScript¶
Це (неповний) перелік відмінностей API між C# та GDScript.
Загальні відмінності¶
Як пояснено у C# basics, C# зазвичай використовує PascalCase
замість snake_case
, який використовує GDScript та C ++.
Глобальна область¶
Глобальні функції та деякі константи довелося перемістити до класів, оскільки C# не дозволяє оголошувати їх у просторах імен. Більшість глобальних констант були переміщені до власних переліків.
Константи¶
Глобальні константи були переміщені до власних перерахунків. Наприклад, константи ERR_*
були переміщені до переліку Error
.
Особливі випадки:
GDScript | C# |
---|---|
SPKEY |
GD.SpKey |
TYPE_* |
перелік Variant.Type |
OP_* |
перелік Variant.Operator |
Математичні функції¶
Математичні глобальні функції, такі як 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# |
---|---|
weakref(obj) |
Object.WeakRef(obj) |
is_instance_valid(obj) |
Object.IsInstanceValid(obj) |
Поради¶
Іноді може бути корисним використання директиви``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
. Цей атрибут слід використовувати для делегата`(`delegate), підпис назви якого буде використаний для визначення сигналу.
[Signal]
delegate void MySignal(string willSendsAString);
See also: Сигнали C#.
Сінглтони¶
Singletons are available as static classes rather than using the singleton pattern.
This is to make code less verbose than it would be with an Instance
property.
Приклад:
Input.IsActionPressed("ui_down")
However, in some very rare cases this is not enough. For example, you may want
to access a member from the base class Godot.Object
, like Connect
.
For such use cases we provide a static property named Singleton
that returns
the singleton instance. The type of this instance is Godot.Object
.
Приклад:
Input.Singleton.Connect("joy_connection_changed", this, nameof(Input_JoyConnectionChanged));
Строка (рядок, текст)¶
Використовуйте System.String
(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
: An additional method is provided besidesMatch
andMatchn
, which allows you to explicitly specify case sensitivity:
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# |
---|---|
get_scale() |
Scale |
Transform2D¶
Структури не можуть мати конструкторів без параметрів у C#. Тому new Transform2D()
ініціалізує всіх примітивних членів до їх значення за замовчуванням. Будь ласка, використовуйте Transform2D.Identity
для еквівалента Transform2D()
в GDScript та C ++.
Наступні методи були перетворені у властивості зі зміненими відповідними назвами:
GDScript | C# |
---|---|
get_rotation() |
Rotation |
get_scale() |
Scale |
Площина (Plane)¶
Наступний метод був перетворений у властивість з дещо іншою назвою:
GDScript | C# |
---|---|
center() |
Center |
Rect2¶
Наступне поле було перетворене у властивість із дещо іншою назвою:
GDScript | C# |
---|---|
end |
End |
Наступний метод був перетворений у властивість з іншою назвою:
GDScript | C# |
---|---|
get_area() |
Area |
Quat¶
Структури не можуть мати конструкторів без параметрів у C#. Тому new Quat()
ініціалізує всіх примітивних членів до їх значення за замовчуванням. Будь ласка, використовуйте Quat.Identity
для еквівалента Quat()
в GDScript та C++.
Наступні методи були перетворені у властивість з іншою назвою:
GDScript | C# |
---|---|
length() |
Length |
length_squared() |
LengthSquared |
Масив¶
Це тимчасово. PoolArrays знадобляться власні типи, щоб їх можна було використовувати так, як вони призначені.
GDScript | C# |
---|---|
Array |
Godot.Collections.Array |
PoolIntArray |
int[] |
PoolByteArray |
byte[] |
PoolFloatArray |
float[] |
PoolStringArray |
String[] |
PoolColorArray |
Color[] |
PoolVector2Array |
Vector2[] |
PoolVector3Array |
Vector3[] |
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)
для його створення.
Варіант (Variant)¶
System.Object
(object
) використовується замість Variant
.
Взаємодія з іншими мовами скриптів¶
Це широко пояснюється в Багатомовні скрипти.
Yield (Вихід)¶
Щось подібне до 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# |
---|---|
Color8 |
Color.Color8 |
is_inf |
float.IsInfinity |
is_nan |
float.IsNaN |
dict2inst |
TODO |
inst2dict |
TODO |