6.Mobのスクリプトの作成
スクリプトをアタッチ
「Mob」のスクリプトを書いていきましょう。
「シーン」ドックの「Mob」を右クリックして「スクリプトをアタッチ」を選択します。
「ノードにスクリプトをアタッチする」ダイアログが開きます。「テンプレート」の横のチェックボックスをチェックします。前回チェックしていた場合は、チェックした状態になっています。
パスがres://mob.gdになっていますので、変更せずに「作成」ボタンを押します。
先頭行がextends RigidBody2Dで、_readyと_process関数が用意された状態でmob.gdが作成されます。また、Scriptビューが開きます。「Ctrl+S」で変更を保存します。
_readyの実装
まずは_ready関数の処理を実装します。ノードのツリーに追加される時に、最初に一度だけ呼び出される関数です。
func _ready() -> void: # 1. AnimatedSprite2Dノードのsprite_framesから、複数のアニメーションの名前を得る # 2. 複数の名前を配列化する var mob_types = Array($AnimatedSprite2D.sprite_frames.get_animation_names()) # 1. 配列からランダムに1つを得る # 2. AnimatedSprite2Dノードのanimationプロパティに、ランダムに得た名前を設定する $AnimatedSprite2D.animation = mob_types.pick_random()
それでは少しスクリプトの説明をおこないます。$AnimatedSprite2Dはget_node("AnimatedSprite2D")のショートカットです。直下のAnimatedSprite2Dという名前のノードを得ます。
get_animation_names関数は「PackedStringArray」という少し特殊な形式の配列を返します。中身は["walk", "swim", "fly"]です。
この配列は高速にアクセスできる代わりに、便利なメソッドがありません。そこでArrayを使って普通の配列にしたあと、変数mob_typesに代入します。次の処理でpick_randomという便利な関数を使うためです。
次の処理では、pick_random関数でランダムに1つの要素を得ます。そして、「AnimatedSprite2D」のanimationプロパティに代入します。
このようにして、ノードのツリーに追加される時に「walk」か「swim」か「fly」のアニメーションをランダムで設定します。
screen_exitedの実装
次は、画面外に出た時の処理を実装します。
まず「シーン」ドックで「VisibleOnScreenNotifier2D」を選択します。そして右側のサイドバーから「ノード」ドックを開きます。
「ノード」ドック内の「VisibleOnScreenNotifier2D」配下にある「screen_exited」を右クリックして「接続」を選びます。
「メソッドにシグナルを接続」ダイアログが開きますので、「接続」ボタンを押します。
mob.gdに_on_visible_on_screen_notifier_2d_screen_exited関数が追加されて、接続された緑色のアイコンが表示されます。また、「ノード」ドックの「screen_exited」にも接続された緑色のアイコンが表示されます。
それでは_on_visible_on_screen_notifier_2d_screen_exited関数に処理を追加しましょう。
func _on_visible_on_screen_notifier_2d_screen_exited() -> void: queue_free() # 削除
queue_free関数は、自身を削除します。画面外に出た通知があったら、自身を削除します。
ここまでのスクリプト
ここまでのスクリプトを掲載します。
extends RigidBody2D # Called when the node enters the scene tree for the first time. func _ready() -> void: # 1. AnimatedSprite2Dノードのsprite_framesから、複数のアニメーションの名前を得る # 2. 複数の名前を配列化する var mob_types = Array($AnimatedSprite2D.sprite_frames.get_animation_names()) # 1. 配列からランダムに1つを得る # 2. AnimatedSprite2Dノードのanimationプロパティに、ランダムに得た名前を設定する $AnimatedSprite2D.animation = mob_types.pick_random() # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(delta: float) -> void: pass func _on_visible_on_screen_notifier_2d_screen_exited() -> void: queue_free() # 削除
プレイヤーと敵ができましたので、次はそれらをまとめたメインシーンを作ります。
