この記事は Google 翻訳による英語翻訳の結果であり、これに DrGraph がいくつかの修正を加えたものです。英語のオリジナルページ:
最初のスクリプトの作成 — Godot Engine (安定版) ドキュメント (英語)
最初のスクリプトを作成する¶
このレッスンでは、GDScript を使用して Godot アイコンを回転させる最初のスクリプトを作成します。はじめにで述べたように、プログラミングの経験があることを前提としています。便宜上、同等の C# コードが別のタブに含まれています。
リファレンス: GDScript、そのキーワード、および構文の詳細については、「GDScript リファレンス」を参照してください。
参考: C# の詳細については、「C# の基礎」ページを参照してください。
プロジェクト設定¶
新しいプロジェクトを作成して最初から始めてください。プロジェクトには画像 (Godot アイコン) を含める必要があります。Godot アイコンは、コミュニティでプロトタイピングによく使用されます。
ゲーム内に表示するには Sprite2D ノードを作成する必要があります。シーン ドックで、[その他のノード] ボタンをクリックします。
検索バーに「Sprite2D」と入力してノードをフィルタリングし、Sprite2D をダブルクリックしてノードを作成します。
シーン タブには Sprite2D ノードが 1 つだけ含まれるようになります。
Sprite2Dノードを表示するにはテクスチャ[Texture]が必要です。右側のインスペクターでは、Texture プロパティが「[empty]」と表示されていることがわかります。Godot アイコンを表示するには、ファイルをクリックして、icon.svg
ファイル システム ドックからテクスチャ スロットにドラッグします。
注: ビューポートに画像をドラッグ アンド ドロップすることで、Sprite2D ノードを自動的に作成できます。
次に、ビューポート内のアイコンをクリックしてドラッグし、ゲーム ビューの中央に配置します。
新しいスクリプトを作成する¶
新しいスクリプトを作成してノードにアタッチするには、シーン ドックで Sprite2D を右クリックし、[スクリプトのアタッチ] を選択します。
「ノードの接続スクリプト」ウィンドウが表示されます。これにより、スクリプトの言語やファイル パスなどのオプションを選択できます。
テンプレートフィールドを「node:default」から「object:empty」に変更して、クリーンなファイルから開始します。他のオプションはデフォルトのままにし、「作成」ボタンをクリックしてスクリプトを作成します。
スクリプト ワークスペースに、sprite_2d.gd
開いた新しいファイルと次のコード行が表示されます。
GDスクリプト |
Sprite2Dを拡張します |
C# |
ゴドーを使用する。 パブリック部分クラス MySprite2D : Sprite2D |
すべての GDScript ファイルは暗黙的にクラスです。キーワードは、extends
このスクリプトが継承または拡張するクラスを定義します。この場合、それは ですSprite2D
。これは、スクリプトが、 、 、 などの拡張クラスを含む Sprite2D ノードのすべてのプロパティと関数にアクセスできることを意味Node2D
しCanvasItem
ます Node
。
注: GDScript では、キーワードを含む行を省略するとextends
、クラスは暗黙的にRefCounted を拡張します。これは Godot がアプリケーションのメモリを管理するために使用します。
継承されたプロパティには、ノードの など、インスペクター ドックで確認できるプロパティが含まれますtexture
。
注: デフォルトでは、インスペクターはノードのプロパティを「タイトルの大文字」で表示し、大文字の単語はスペースで区切られます。GDScript コードでは、これらのプロパティは「snake_case」で表されます。これは、単語を区切るアンダースコアが付いた小文字です。
インスペクターでプロパティ名の上にマウスを置くと、コード内の説明とその識別子が表示されます。
ハローワールド!¶
スクリプトは現在何も行っていません。まず、出力の下部パネルに「Hello, world!」というテキストを出力させてみましょう。
次のコードをスクリプトに追加します。
GDスクリプト |
func _init(): |
C# |
public MySprite2D() { GD.Print("Hello, world!"); } |
分解してみましょう。キーワードは、func
という名前の新しい関数を定義します _init
。これは、クラスのコンストラクターの特別な名前です。この関数を定義すると、各オブジェクトまたはノードがメモリ内に作成されるときにエンジンが _init()
この関数を呼び出します。
注: GDScript はインデントベースの言語です。行の先頭にあるタブは、print()
コードが機能するために必要であることを示します。これを省略した場合、または行が正しくインデントされていない場合、エディターはその行を赤で強調表示し、「予期されたインデントされたブロック」というエラー メッセージを表示します。
如果您还没有保存场景,可以将场景保存为sprite_2d.tscn
をクリックし、F6 (macOS では Cmd + R) を押して実行します。展開された出力下部パネルを表示します。「Hello, world!」と表示されるはずです。
関数を削除すると_init()
、コードは 1 行だけ残ります。extends Sprite2D
ターン¶ _
ノードを移動して回転させます。これを行うには、スクリプトに 2 つのメンバー変数を追加します。移動速度 [speed] (ピクセル/秒) と角速度 [angular_speed] (ラジアン/秒) です。extends Sprite2D
[GDScript] の後に次の内容を追加します。
GDスクリプト |
var 速度 = 400 var angular_speed = PI |
C# |
プライベート int _speed = 400; プライベート float _angularSpeed = Mathf.Pi; |
メンバー変数は、スクリプトの先頭近く、「expand」行の後、関数の前に配置されます。speed
このスクリプトがアタッチされた各ノード インスタンスには、およびプロパティの独自のコピーがありますangular_speed
。
注: Godot の角度はデフォルトでラジアンで測定されますが、角度を度で計算したい場合は、組み込みの関数とプロパティを使用できます。
アイコンを移動するには、ゲーム ループ内のフレームごとにアイコンの位置と回転 [状態] を更新する必要があります。Node
クラスの仮想関数を使用できます_process()
。Sprite2D などの Node 派生クラスで定義すると、Godot はフレームごとに関数を呼び出し、delta
前のフレームからの経過時間である という名前のパラメータを渡します。
注: ゲームは 1 秒あたり多くの画像をレンダリングすることで動作します。各画像はフレームと呼ばれ、ループでレンダリングされます。ゲームがグラフィックスを生成する速度を 1 秒あたりのフレーム数 (FPS) で測定します。ほとんどのゲームでは 60 FPS を目指しますが、低速のモバイル デバイスでは 30 FPS、仮想現実ゲームでは 90 ~ 240 FPS になる場合があります。
エンジンとゲームの開発者は、ゲームの世界を更新し、一定の間隔でグラフィックスをレンダリングするために最善を尽くしていますが、フレームのレンダリング時間には常に小さな変動が生じます。そのため、エンジンはモーションをフレーム レートから独立させるためにこのデルタ時間値を提供します。
スクリプトの最後で、次の関数を定義します。
GDスクリプト |
func _process(delta): 回転 += angular_speed * デルタ |
C# |
public override void _Process(double delta) { Rotation += _angularSpeed * (float)delta; } |
キーワードはfunc
新しい関数 [GDScript] を定義します。その後、関数の名前とパラメータを括弧内に記述する必要があります。コロンは定義を終了し、次のインデントされたブロックは関数の内容または命令です。
注: _process()
[similar to] が_init()
先頭のアンダースコアで始まることに注意してください。慣例により、Godot の仮想関数、つまりエンジンと通信するためにオーバーライドできる組み込み関数はアンダースコアで始まります。
関数内のコード行は、rotation += angular_speed * delta
rotation
Node2D
Sprite2D,
フレームごとにスプライト [Sprite] の回転を増加させることです。ここで、[回転]は[Node2D]クラスから継承した属性であり、[Sprite2Dクラス]を拡張したものです。これはノードの回転を制御し、ラジアンを使用します。
注: コード エディターでは、Ctrl キーを押しながら組み込みプロパティまたは関数 ( position
、など) をクリックするrotation
か、_process
対応するドキュメントを新しいタブで開くことができます。
シーンを実行して、Godot アイコンが所定の位置で回転することを確認します。
注: C# では、_Process()
パラメータに注意してくださいdelta为double类型
。そのため、パラメータを回転に適用するときは、次のように変換する必要があります。float。
移動¶ _
次に、ノードを移動してみましょう。次の 2 行を function 内に追加し_process()
、新しい行がその前の行と同じようにインデントされていることを確認します。rotation += angular * delta
GDスクリプト |
var 速度 = Vector2.UP.rotated(回転) * 速度 位置 += 速度 * デルタ |
C# |
var 速度 = Vector2.Up.Rotated(Rotation) * _speed; 位置 += 速度 * (float)delta; |
すでに見たように、var
キーワードは新しい変数を定義します。これをスクリプトの先頭に置くと、クラスのプロパティが定義されます。[ここで使用されます] 関数内でローカル変数を定義します。ローカル変数は関数のスコープ内にのみ存在します。
というローカル変数を定義しますvelocity
。これは、方向と速度を表す 2 次元ベクトル [Vector2] です。ノードを前方に移動するには、Vector2.UP
Vector2 クラスの定数である上向きベクトルから開始し、 rotated()
そのメソッドを呼び出してそれを回転させます。この式は、Vector2.UP.rotated(rotation)【为】
アイコンに対して前方を指すベクトルです。プロパティを乗算するとspeed
、ノードを前方に移動するために使用できる速度が得られます。
[velocity * delta
position】
ノードの位置プロパティに]を追加して移動します。位置 [位置] 自体は、Godot の組み込み型であるVector2型であり、2D ベクトルを表します。
シーンを実行して、ゴドーが円を描くように回転するのを確認します [ランニング エフェクト]。
注: このようにノードを移動すると、壁や床との衝突は考慮されません。最初の 2D ゲームでは、衝突を検出しながらオブジェクトを移動する別の方法を学びます。
現在、ノードは独自に移動します。次のセクション 「プレーヤー入力を聞く」では、プレーヤー入力を使用して制御します。
完全なスクリプト¶
参照用の完全なsprite_2d.gd
ファイルは次のとおりです。
GDスクリプト |
Sprite2Dを拡張します var 速度 = 400
var 速度 = Vector2.UP.rotated(回転) * 速度 位置 += 速度 * デルタ |
C# |
ゴドーを使用する。 パブリック部分クラス MySprite2D : Sprite2D public override void _Process(double delta) 位置 += 速度 * (float)delta; |