C# API differences to GDScript¶
これは、C#とGDScriptのAPIの相違点の(不完全な)リストです。
一般的な相違点¶
C# の基本 で説明したように、C#では一般に、GDScriptおよびC++で使用される snake_case
の代わりに PascalCase
が使用されます。
グローバル スコープ¶
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");
}
}
エクスポート・キーワード¶
GDScriptの export
キーワードの代わりに [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;
}
シグナル・キーワード¶
GDScriptの signal
キーワードの代わりに [Signal]
属性を使用してシグナルを宣言します。この属性は、関数宣言とdelegate
を組み合わせてシグナルを定義する必要があります。
[Signal]
delegate void MySignal(string willSendsAString);
c_sharp_signals も参照して下さい。
onready keyword¶
GDScript has the ability to defer the initialization of a member variable until the ready function is called with onready (cf. onready keyword). For example:
onready var my_label = get_node("MyLabel")
However C# does not have this ability. To achieve the same effect you need to do this.
private Label _myLabel;
public override void _Ready()
{
_myLabel = GetNode<Label>("MyLabel");
}
シングルトン¶
シングルトンは、シングルトンパターンを使用するのではなく、静的クラスとして使用できます。これは、コードを Instance
プロパティを使用する場合よりも冗長にするためです。
例:
Input.IsActionPressed("ui_down")
ただし、非常にまれなケースでは、これは十分ではありません。たとえば、 Connect
のような基本クラスから Godot.Object
メンバーにアクセスしたい場合があります。そのようなユースケースのために、シングルトンインスタンスを返す Singleton
という名前の静的プロパティを提供します。このインスタンスのタイプは Godot.Object
です。
例:
Input.Singleton.Connect("joy_connection_changed", this, nameof(Input_JoyConnectionChanged));
文字列¶
System.String
(string
)を使用します。Godot の String メソッドのほとんどは、拡張メソッドとして StringExtensions
クラスによって提供されます。
例:
string upper = "I LIKE SALAD FORKS";
string lower = upper.ToLower();
ただし、いくつかの違いがあります:
erase
: 文字列は C#では変更できないため、拡張メソッドに渡される文字列を変更することはできません。このため、文字列ではなくStringBuilder
の拡張メソッドとしてErase
が追加されました。または、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
Basis(基底)¶
C#では、構造体にパラメーターなしのコンストラクターを含めることはできません。したがって、new Basis()
はすべてのプリミティブメンバーを規定値に初期化します。 GDScriptおよびC++の Basis()
に相当するものが必要な場合は ``Basis.Identity``を使用します。
次のメソッドは、異なる名前のプロパティに変換されました:
GDScript |
C# |
---|---|
|
|
Transform2D¶
C#では、構造体にパラメーターなしのコンストラクターを含めることはできません。したがって、new Transform2D()
は、すべてのプリミティブメンバーを規定値に初期化します。 GDScriptおよびC++の Transform2D()
に相当するものが必要な場合は Transform2D.Identity
を使用してください。
次のメソッドは、それぞれの名前が変更されたプロパティに変換されました:
GDScript |
C# |
---|---|
|
|
|
|
Plane¶
次のメソッドは、わずかに異なる名前のプロパティに変換されました:
GDScript |
C# |
---|---|
|
|
Rect2¶
次のフィールドは、わずかに異なる名前のプロパティに変換されました。
GDScript |
C# |
---|---|
|
|
次のメソッドは、異なる名前のプロパティに変換されました:
GDScript |
C# |
---|---|
|
|
Quat¶
C#では、構造体にパラメーターなしのコンストラクターを含めることはできません。したがって、new Quat()
はすべてのプリミティブメンバーを規定値に初期化します。 GDScriptおよびC++の Quat()
に相当するものが必要な場合は Quat.Identity
を使用してください。
次のメソッドは、異なる名前のプロパティに変換されました。
GDScript |
C# |
---|---|
|
|
|
|
配列¶
これは一時的なものです。それぞれの PoolArray は、本来の方法で使用するために独自の型を必要とします。
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)
コンストラクターを使用して作成します。
バリアント¶
Variant
の代わりに System.Object
(object
)が使用されます。
他のスクリプト言語との通信¶
これは クロスランゲージでのスクリプト作成 で詳細に説明されています。
Yield¶
C#の yieldキーワード<https://docs.microsoft.com/en-US/dotnet/csharp/language-reference/keywords/yield> を使用すると、単一のパラメーターを持つGDScriptの yield
に似たものを実現できます。
async/awaitおよび Godot.Object.ToSignal
を使用すると、シグナルのyieldと同等の結果を得ることができます。
例:
await ToSignal(timer, "timeout");
GD.Print("After timeout");
他の相違点¶
GDScriptで動作する preload
は、C#では使用できません。代わりに GD.Load
または ResourceLoader.Load
を使用してください。
他の相違点:
GDScript |
C# |
---|---|
|
|
|
|
|
|
|
TODO |
|
TODO |