SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Godot Engine 2Dゲーム開発入門

【詳細解説】Godot Engineで始める2Dゲーム開発──公式サンプルを試してみよう

Godot Engine 2Dゲーム開発入門 第2回

6.Mobのスクリプトの作成

スクリプトをアタッチ

 「Mob」のスクリプトを書いていきましょう。

 「シーン」ドックの「Mob」を右クリックして「スクリプトをアタッチ」を選択します。

スクリプトをアタッチ
スクリプトをアタッチ

 「ノードにスクリプトをアタッチする」ダイアログが開きます。「テンプレート」の横のチェックボックスをチェックします。前回チェックしていた場合は、チェックした状態になっています。

 パスがres://mob.gdになっていますので、変更せずに「作成」ボタンを押します。

「ノードにスクリプトをアタッチする」ダイアログ
「ノードにスクリプトをアタッチする」ダイアログ

 先頭行がextends RigidBody2Dで、_ready_process関数が用意された状態でmob.gdが作成されます。また、Scriptビューが開きます。「Ctrl+S」で変更を保存します。

mob.gd
mob.gd

_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()

 それでは少しスクリプトの説明をおこないます。$AnimatedSprite2Dget_node("AnimatedSprite2D")のショートカットです。直下のAnimatedSprite2Dという名前のノードを得ます。

 get_animation_names関数は「PackedStringArray」という少し特殊な形式の配列を返します。中身は["walk", "swim", "fly"]です。

 この配列は高速にアクセスできる代わりに、便利なメソッドがありません。そこでArrayを使って普通の配列にしたあと、変数mob_typesに代入します。次の処理でpick_randomという便利な関数を使うためです。

 次の処理では、pick_random関数でランダムに1つの要素を得ます。そして、「AnimatedSprite2D」のanimationプロパティに代入します。

 このようにして、ノードのツリーに追加される時に「walk」か「swim」か「fly」のアニメーションをランダムで設定します。

mob.gd
mob.gd

screen_exitedの実装

 次は、画面外に出た時の処理を実装します。

 まず「シーン」ドックで「VisibleOnScreenNotifier2D」を選択します。そして右側のサイドバーから「ノード」ドックを開きます。

 「ノード」ドック内の「VisibleOnScreenNotifier2D」配下にある「screen_exited」を右クリックして「接続」を選びます。

screen_exited
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関数は、自身を削除します。画面外に出た通知があったら、自身を削除します。

ここまでのスクリプト

 ここまでのスクリプトを掲載します。

mob.gd
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()	# 削除

 プレイヤーと敵ができましたので、次はそれらをまとめたメインシーンを作ります。

次のページ
7.メインシーンの作成

この記事は参考になりましたか?

Godot Engine 2Dゲーム開発入門連載記事一覧

もっと読む

この記事の著者

柳井 政和(ヤナイ マサカズ)

クロノス・クラウン合同会社 代表社員http://crocro.com/オンラインソフトを多数公開。プログラムを書いたり、ゲームを作ったり、記事を執筆したり、マンガを描いたり、小説を書いたりしています。「めもりーくりーなー」でオンラインソフト大賞に入賞。最近は、小説家デビューして小説も書いています(『裏切りのプログラム』他)。面白いことなら何でもOKのさすらいの企画屋です。 

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/21370 2025/05/28 11:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー