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 besides Match and Matchn, 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