Відмінності API C# в GDScript¶
Це (неповний) перелік відмінностей API між C# та GDScript.
Загальні відмінності¶
Як пояснено у Основи C#, C# зазвичай використовує PascalCase
замість snake_case
, який використовує GDScript та C ++.
Глобальна область¶
Глобальні функції та деякі константи довелося перемістити до класів, оскільки C# не дозволяє оголошувати їх у просторах імен. Більшість глобальних констант були переміщені до власних переліків.
Константи¶
Глобальні константи були переміщені до власних перерахунків. Наприклад, константи ERR_*
були переміщені до переліку Error
.
Особливі випадки:
Скрипт |
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
.
Винятки:
Скрипт |
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
. Цей атрибут слід використовувати для делегата`(`delegate), підпис назви якого буде використаний для визначення сигналу.
[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
, яка повертає синглтон екземпляр. Тип цього екземпляра - 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
: Додатковий спосіб передбачений на додаток до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 ++.
Наступний метод був перетворений у властивість з іншою назвою:
Скрипт |
C# |
---|---|
|
|
Transform2D¶
Структури не можуть мати конструкторів без параметрів у C#. Тому new Transform2D()
ініціалізує всіх примітивних членів до їх значення за замовчуванням. Будь ласка, використовуйте Transform2D.Identity
для еквівалента Transform2D()
в GDScript та C ++.
Наступні методи були перетворені у властивості зі зміненими відповідними назвами:
Скрипт |
C# |
---|---|
|
|
|
|
Площина¶
Наступний метод був перетворений у властивість з дещо іншою назвою:
Скрипт |
C# |
---|---|
|
|
Rect2¶
Наступне поле було перетворене у властивість із дещо іншою назвою:
Скрипт |
C# |
---|---|
|
|
Наступний метод був перетворений у властивість з іншою назвою:
Скрипт |
C# |
---|---|
|
|
Quat¶
Структури не можуть мати конструкторів без параметрів у C#. Тому new Quat()
ініціалізує всіх примітивних членів до їх значення за замовчуванням. Будь ласка, використовуйте Quat.Identity
для еквівалента Quat()
в GDScript та C++.
Наступні методи були перетворені у властивість з іншою назвою:
Скрипт |
C# |
---|---|
|
|
|
|
Масив¶
Це тимчасово. PoolArrays знадобляться власні типи, щоб їх можна було використовувати так, як вони призначені.
Скрипт |
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
замість нього.
Інші відмінності:
Скрипт |
C# |
---|---|
|
|
|
|
|
|
|
ЩЕ НЕ НАПИСАНО. |
|
ЩЕ НЕ НАПИСАНО. |