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の雰囲気がだいぶ分かってきたと思います。
