Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
Особливості мови C#
На цій сторінці ви знайдете огляд часто використовуваних функцій як C#, так і Godot, та способів їх спільного використання.
Перетворення типів і кастинг
C# - це статично типізована мова. Тому ви не можете зробити наступне:
var mySprite = GetNode("MySprite");
mySprite.SetFrame(0);
Метод GetNode()
повертає екземпляр Node
. Ви повинні явно перетворити його на потрібний похідний тип, у цьому випадку Sprite2D
.
Для цього у вас є різні варіанти в C#.
Приведення та перевірка типу
Викидає InvalidCastException
, якщо повернутий вузол не може бути приведений до Sprite2D. Ви б використовували його замість оператора as
, якщо ви майже впевнені, що він не вийде.
Sprite2D mySprite = (Sprite2D)GetNode("MySprite");
mySprite.SetFrame(0);
Використання оператора AS
Оператор as
повертає null
, якщо вузол не може бути приведений до Sprite2D, і з цієї причини його не можна використовувати з типами значень.
Sprite2D mySprite = GetNode("MySprite") as Sprite2D;
// Only call SetFrame() if mySprite is not null
mySprite?.SetFrame(0);
Використання загальних методів
Також передбачені загальні методи, щоб зробити перетворення цього типу прозорим.
GetNode<T>()
переводить вузол перед поверненням. Він видасть, InvalidCastException
якщо вузол не може бути приведений до бажаного типу.
Sprite2D mySprite = GetNode<Sprite2D>("MySprite");
mySprite.SetFrame(0);
GetNodeOrNull<T>()
використовує оператор as
і поверне null
, якщо вузол неможливо перетворити на потрібний тип.
Sprite2D mySprite = GetNodeOrNull<Sprite2D>("MySprite");
// Only call SetFrame() if mySprite is not null
mySprite?.SetFrame(0);
Перевірка типу за допомогою оператора IS
Щоб перевірити, чи можна перевести вузол у Sprite2D, ви можете скористатися оператором is
. Оператор is
повертає false, якщо вузол не може бути приведений до Sprite2D, інакше він повертає true. Зауважте, що коли оператор is
використовується проти null
, результат завжди буде false
.
if (GetNode("MySprite") is Sprite2D)
{
// Yup, it's a Sprite2D!
}
if (null is Sprite2D)
{
// This block can never happen.
}
Ви також можете оголосити нову змінну для умовного збереження результату приведення, якщо оператор is
повертає true
.
if (GetNode("MySprite") is Sprite2D mySprite)
{
// The mySprite variable only exists inside this block, and it's never null.
mySprite.SetFrame(0);
}
Більш просунуту перевірку типу ви можете подивитись у Відповідність шаблонів.
Preprocessor визначення
У Godot є набір визначень, які дозволяють змінювати ваш C# код залежно від середовища.
Приклади
Наприклад, ви можете змінити код на основі платформи:
public override void _Ready()
{
#if (GODOT_32 || GODOT_MOBILE || GODOT_WEB)
// Use simple objects when running on less powerful systems.
SpawnSimpleObjects();
#else
SpawnComplexObjects();
#endif
}
Або ви можете виявити, в якому движку знаходиться ваш код, корисний для створення між-движкових бібліотек:
public void MyPlatformPrinter()
{
#if GODOT
GD.Print("This is Godot.");
#elif UNITY_5_3_OR_NEWER
print("This is Unity.");
#else
throw new NotSupportedException("Only Godot and Unity are supported.");
#endif
}
Або ви можете написати сценарії, націлені на кілька версій Годо, і скористатися функціями, які доступні лише в деяких із цих версій:
public void UseCoolFeature()
{
#if GODOT4_3_OR_GREATER || GODOT4_2_2_OR_GREATER
// Use CoolFeature, that was added to Godot in 4.3 and cherry-picked into 4.2.2, here.
#else
// Use a workaround for the absence of CoolFeature here.
#endif
}
Повний список визначень
GODOT
завжди визначається для проєктів Godot.ІНСТРУМЕНТИ
визначається під час створення з конфігурацією Debug (редактор і програвач редактора).GODOT_REAL_T_IS_DOUBLE
визначається, коли властивістьGodotFloat64
має значенняtrue
.GODOT_64
, абоGODOT_32
, визначається залежно від того, чи архітектура 64-бітна, чи 32-бітна.One of
GODOT_LINUXBSD
,GODOT_WINDOWS
,GODOT_OSX
,GODOT_ANDROID
,GODOT_IOS
,GODOT_WEB
depending on the OS. These names may change in the future. These are created from theget_name()
method of the OS singleton, but not every possible OS the method returns is an OS that Godot with .NET runs on.GODOTX
,GODOTX_Y
,GODOTX_Y_Z
,GODOTx_OR_GREATER
,GODOTX_y_OR_GREATER
іGODOTX_Y_z_OR_GREATER
, деX
,Y
, іZ
замінено на поточну основну, додаткову та виправлену версії Godot.x
,y
іz
замінюються всіма значеннями від 0 до номера поточної версії для цього компонента.Примітка
Ці визначення вперше були додані в Godot 4.0.4 і 4.0. Визначення версій для попередніх версій не існують, незалежно від поточної версії Godot.
Наприклад: Godot 4.0.5 визначає «GODOT4», «GODOT4_OR_GREATER», «GODOT4_0_0», «GODOT4_0_5», «GODOT4_0_5_OR_G». REATER`` . Godot 4.3.2 визначає
GODOT4_OR_GREATER
,GODOT4_3
,GODOT4_0_OR_GREATER
,GODOT4_1_OR_GREATER
,GODOT4_2_OR_GREATER
,GODOT4_3_OR_GREATER
, ``GODOT4_3_2 ``, ``GODOT4_3_0_OR_GREATER
,GODOT4_3_1_OR_GREATER
іGODOT4_3_2_OR_GREATER
.
Під час експортування також можна визначити наступне залежно від особливостей експорту:
Залежно від типу платформи
GODOT_PC
,GODOT_MOBILE
, абоGODOT_WEB
.Один із
GODOT_WINDOWS
,GODOT_LINUXBSD
,GODOT_MACOS
,GODOT_ANDROID
,GODOT_IOS
абоGODOT_WEB
залежно від платформи.
Щоб побачити приклад проєкту, дивіться демонстраційну версію тестування ОС: https://github.com/godotengine/godot-demo-projects/tree/master/misc/os_test