6.スクリプトを書いてみよう2
アタッチされていないスクリプト
今度は「ファイルシステム」ドックを右クリックして「新規スクリプト」を選択します。

「スクリプト作成」ダイアログが表示されます。

パスのファイル名をtest.gd
に変更して「作成」ボタンを押します。「ファイルシステム」にtest.gd
が作成されますのでダブルクリックして開きます。

extends Node
と書いてあり、ノードの基底クラスを継承しています。このプログラムを次のように書き換えます。
extends Node func _init(): print("Hello, world! 2")

そして、「Ctrl+S」で変更を保存したあと、右上の「▶」(プロジェクトの実行)をクリックします。先ほどと同じように「test (DEBUG)」というウィンドウが表示されますので、このウィンドウを閉じます。
中央のビューの下に「出力」パネルが開き、「Hello, world!」と表示されているのが分かります。
「Hello, world! 2」は表示されていません。test.gd
はアタッチしていないので呼び出されません。

別のスクリプトの読み込み
続いてsprite_2d.gd
を次のように書き換えます。
extends Sprite2D const TEST = preload("res://test.gd") func _init(): print("Hello, world!") TEST.new()
preload
関数を使いtest.gd
をTEST
クラスとして読み込んだあと、TEST.new()
でインスタンス化します。

「Ctrl+S」で変更を保存したあと、右上の「▶」(プロジェクトの実行)をクリックします。先ほどと同じように「test(DEBUG)」というウィンドウが表示されますので、このウィンドウを閉じます。
中央のビューの下に「出力」のパネルが開き、「Hello, world!」「Hello, world! 2」と表示されているのが分かります。
test.gd
が読み込まれてインスタンス化されたので、_init
関数の中身が実行されました。

別のスクリプトの関数を利用
さらに、test.gd
とsprite_2d.gd
を次のように書き換えます。
extends Node func _init(): print("Hello, world! 2") func my_func(): print("my_func")
extends Sprite2D const TEST = preload("res://test.gd") func _init(): print("Hello, world!") var test = TEST.new() test.my_func()
「Ctrl+S」で変更を保存したあと、右上の「▶」(プロジェクトの実行)をクリックします。先ほどと同じように「test (DEBUG)」というウィンドウが表示されますので、このウィンドウを閉じます。
中央のビューの下に「出力」のパネルが開き、「Hello, world!」「Hello, world! 2」「my_func」と表示されているのが分かります。test.gd
のインスタンスを変数test
に代入して、test.gd
のmy_func
関数を呼び出しました。

GDScriptではPythonの命名規則のように、関数名は小文字と_
を利用したスネークケースで書きます。またPythonとは異なり、変数はvar
を使って定義します。
GDScriptの雰囲気がだいぶ分かってきたと思います。