入門
概要
ゲームの動作やメカニクスを構築するには、スクリプトを記述してノードやその他のオブジェクトにアタッチします。例えば、Sprite2Dノードは自動的に画像を表示しますが、画面上で移動させるには、速度や移動方向などを制御するスクリプトを追加する必要があります。
これはインスペクターを使用する場合と同様と考えてください。GDScriptはGodotノードに関するあらゆる知識を持ち、それらへのアクセス方法を知っているだけでなく、動的に変更することもできます。
Godot公式ウェブサイトのGDScriptドキュメントは、言語の基本を理解するための最適なリソースです。時間を取ってしっかり読み込むことを強くオススメします。
GDScript は Python ですか?
「GDScriptはPythonをベースにしている」と説明されているのをよく目にするでしょう。これは一見誤解を招きやすい表現ですが、実際にはGDScriptはPythonに似た 構文 を採用してはいるものの、Godotエンジン向けに最適化された完全に独立した言語です。とはいえ、すでにPythonをある程度知っている方なら、GDScriptは非常に親しみやすいものに感じられるはずです。
多くのチュートリアル(およびGodot自体)では、ある程度のプログラミング経験があることを前提としています。これまで一度もコードを書いたことがない場合、Godotを学ぶのは困難に感じるかもしれません。ゲームエンジンを習得するだけでも大きな挑戦ですが、同時にコーディングも学ぶとなると、負担はさらに大きくなります。もしこのセクションのコードで苦戦しているなら、初心者向けプログラミング講座(Pythonがオススメです)を履修することで、基本的な概念をしっかりと理解できるはずです。
スクリプトの構成要素
GDScriptファイルの最初の行はextends <クラス名>で始めなければなりません。ここで<クラス名>は、既存の組み込みクラスまたはユーザーが定義したカスタムクラスのいずれかを指定します。たとえば、CharacterBody2Dノードにスクリプトをアタッチする場合、スクリプトの冒頭はextends CharacterBody2Dとなります。これは、スクリプトが組み込みのCharacterBody2Dオブジェクトの持つ機能をすべて引き継ぎ、さらにユーザー定義の追加機能で拡張していることを意味します。
スクリプトの残り部分では、任意数の変数(通称「クラスプロパティ」)と関数(通称「クラスメソッド」)を定義できます。
スクリプトの作成方法
最初のスクリプトを作成してください。覚えておくべきは、どのノードにもスクリプトをアタッチできるということです。
エディターを開き、空のシーンに Sprite2Dノードを追加してください。新規追加したノードを右クリックし、「スクリプトをアタッチ」を選択します。または、検索ボックス横のボタンをクリックしてスクリプトをアタッチすることもできます。
次に、スクリプトを保存する場所とファイル名を決定する必要があります。ノードに名前を付けている場合、スクリプトは自動的にそれに一致する名前が割り当てられます(変更を加えない限り、このスクリプトはおそらく「sprite2d.gd」という名前になります)。
スクリプトエディターウィンドウが開きます。ここに、新しく作成した空のスプライト用スクリプトが表示されます。Godotは自動的に数行のコードと、各コードの機能を説明するコメントを自動生成しています。
extends Sprite2D
# Called when the node enters the scene tree for the first time.
func _ready():
pass # Replace with function body.
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta):
pass
スクリプトが Sprite2D に追加されたため、最初の行は extends Sprite2D に自動的に設定されます。このスクリプトは Sprite2D クラスを継承しているため、Sprite2Dノードが提供するすべてのプロパティとメソッドにアクセスして操作することが可能になります。
プロパティ と メソッド は、オブジェクト内で定義された 変数 および 関数 を指す専門用語です。プログラマー間では、これらの用語がしばしば混同されて使用されています。
その後、スクリプトで使用するすべての変数(いわゆる「メンバ変数」)を定義します。変数は 「var」 キーワードで宣言します - コメント例からもわかるように。
どうぞコメントを削除して、次の部分について話してください。
ここで _ready() という関数が定義されています。GDScriptでは関数を「func」キーワードで宣言します。この_ready()関数はGodotが特にチェックする特別な関数で、ノードがツリーに追加されるたびに実行されます - 例えば「再生」ボタンを押した時などに呼び出されます。
ゲーム開始時にスプライトを特定の位置に配置したいとします。インスペクターでは「位置」プロパティを設定する必要があります。「Node2D」とラベル付けされたセクションにある点に注目してください。これは、これは任意の Node2Dタイプのノードが持つプロパティであり、Sprite2Dに限定されないことを示しています。
コード内でプロパティを設定するには?1つの方法として、インスペクターでプロパティの上にマウスカーソルを合わせると、名前を確認できます。
Godotには非常に便利な組み込みヘルプ/リファレンスツールが用意されています。スクリプトウィンドウ上部の「クラス」をクリックし、Node2Dを検索すると、該当クラスで利用できるすべてのプロパティとメソッドが記載されたヘルプページが表示されます。少し下にスクロールすると、探していた「メンバ変数」セクションにpositionが表示されているはずです。また、このプロパティが「Vector2」型であることも明記されています。
スクリプトに戻ってそのプロパティを使いましょう。
func _ready():
position = Vector2(100, 150)
エディターが入力に応じて即座に提案を表示しているのに注目してください。Godotは多くの場面でベクトルを使用しており、この点については後ほど詳しく説明します。まずは「Vector2」と入力してみます。ヒントが表示されるので、x と y には2つの浮動小数点数を指定する必要があることがわかります。
これで「このスプライトが起動したら、その位置を (100, 150) に設定する」というスクリプトが完成しました。このコードを試すには、『シーンを実行』ボタンをクリックしてみます。
プログラミングを始めたばかりの人が「これらすべてのコマンドをどうやって覚えればいいですか?」とよく質問します。他のどんなスキルとも同様に、これは暗記ではなく練習次第なのです。使えば使うほど、頻繁に使う機能は自然と身につき、無意識に扱えるようになります。それまでは、リファレンスドキュメントをすぐに参照できるようにしておくことをオススメします。わからないものに出会ったら、いつでも検索機能を使います。複数モニターを使用している場合は、Webドキュメントを横に開いておき、素早く確認できる状態にしておくと便利です。
まとめ
GDScriptで最初のスクリプトを作成できました!次に進む前に、このステップで行った内容を完全に理解しておいてください。次回では、スプライトを画面上で移動させるためのコードを追加していきます。