SHOEISHA iD

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

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

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

Godot Engine 2Dゲーム開発入門

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

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

5.敵の作成

Mobシーンの作成

 プレイヤー側を作成しましたので、次は敵側を作成します。作るのはMobシーンです。

 まずは画面の表示を戻しておきましょう。画面上部のタブから「2d」を選び、2Dビューにします。また、右側のサイドパネルで「ノード」ドックを選んでいたものを「インスペクター」ドックに戻します。

 まずはMobシーンを作ります。トップメニューの「シーン」から「新規シーン」を選択します。

新規シーン
新規シーン

 まだ何もノードがない空のシーンが表示されます。

空のシーン
空のシーン

 シーンの「ルートノードを生成」の「その他のノード」ボタンをクリックして、「RigidBody2D」を追加します。

「RigidBody2D」を追加
「RigidBody2D」を追加
「RigidBody2D」を追加したあと
「RigidBody2D」を追加したあと

 そして、「RigidBody2D」の名前を「Mob」に変更します。

名前を「Mob」に変更
名前を「Mob」に変更

 2Dビューの上部にあるアイコンの中で、鍵マークの右隣にあるアイコン「選択したノードをグループ化」をクリックします。「Player」シーンと同じ作業です。

 この設定をおこなうことで、ビューで子グループをクリックしたときに、自動で親が選択されます。誤って子ノードを移動してしまうというミスを防げます。

選択したノードをグループ化
選択したノードをグループ化

 ここでいったん「Ctrl+S」でシーンを保存しておきましょう。名前がmob.tscnとなっているので、そのまま保存ボタンを押します。

シーンを保存
シーンを保存

 「ファイルシステム」ドックにmob.tscnが追加されました。

mob.tscn
mob.tscn

子ノードの追加

 続いて「Mob」を右クリックして「子ノードを追加」を選び、次の3つのノードを追加します。追加したら「Ctrl+S」で保存します。

  • Mob(RigidBody2D)
    • AnimatedSprite2D
    • CollisionShape2D
    • VisibleOnScreenNotifier2D
3つのノードを追加
3つのノードを追加

 それぞれのノードが、どのようなノードなのかを簡単に説明します。

 RigidBody2Dを直訳すると「硬い体2D」です。PhysicsBody2D(物理シミュレーションによって動かされる2D物理ボディ)を継承しており、完全な2D物理を実装しています。

 このノードは、重力や衝突などをあつかえ、変形せずに形状を保ちます。倒せる木や動かせる木箱など、環境内で相互作用するオブジェクトに向いています。

 AnimatedSprite2Dは、既に出てきたノードです。アニメーションフレームとして複数のテクスチャを持ちます。アニメーションはSpriteFramesリソースを使用して作成されます。

 CollisionShape2Dも、既に出てきたノードです。直訳すると「衝突形状2D」です。親にShape2Dを提供し、編集できるようにします。このノードは、Area2Dに検出シェイプを与えたり、PhysicsBody2Dをソリッド オブジェクトに変換したりできます。

 VisibleOnScreenNotifier2Dを直訳すると「画面上での表示を通知する2D」です。

 このノードは、2D空間の長方形領域を表しており、この領域の一部が画面上またはビューポート内に表示されるとscreen_enteredシグナルが発行されます。また、領域の一部が表示されなくなるとscreen_exitedシグナルが発行されます。

 このノードを使えば、画面内に登場したり、退出したりするタイミングを知ることができます。

設定の追加

 まずは重力を切ります。2D物理では、画面下に向けて重力が発生しています。これは横視点のアクションゲームのための機能です。そのままでは敵が画面下に落下してしまいます。今回作るのは上から見下ろす視点のゲームなので、下方向の重力は不要です。

 「シーン」ドックで「Mob」ノードを選択します。「インスペクター」ドックの一番上にある「RigidBody2D」の「Gravity Scale」の値を0にします。そして「Ctrl+S」で保存します。

Gravity Scale
Gravity Scale

 続いて「インスペクター」ドックの「CollisionObject2D」の「Collision」グループを開きます。

 デフォルトでは、「Layer」の「1」、「Mask」の「1」にチェックが入っています(色が変わってアクティブになっています)。「Mask」の「1」のチェックを外して非アクティブの状態にします。そして「Ctrl+S」で保存します。

 こうすることで「Mob」同士が衝突しなくなります。

Collision
Collision

アニメーションの追加

 次は、「Player」の時と同じようにアニメーションを追加していきます。

 「シーン」ドックで「AnimatedSprite2D」を選択します。「インスペクター」ドックの「AnimatedSprite2D」の「Animation」グループを開きます。「Sprite Frames」が「<空>」になっていますので、クリックして「新規 SpriteFrames」を選びます。

新規 SpriteFrames
新規 SpriteFrames

 項目「Sprite Frames」に設定した「SpriteFrames」(新規に追加したもの)をクリックすると、画面下部に「アニメーション」と「アニメーション フレーム」のパネルが開きます。

「アニメーション」と「アニメーション フレーム」
「アニメーション」と「アニメーション フレーム」

 「アニメーション」にあらかじめ入っている「default」の名前を「fly」に変更します。そして、「アニメーション フレーム」に、「ファイルシステム」ドックのart/enemyFlyingAlt_1.pngart/enemyFlyingAlt_2.pngを順番にドロップします。

 また、「アニメーション」の「5.0 フレームレート(FPS)」という入力欄に「3」と入力します。

fly
fly

 同じように「swim」と「walk」を作成します。それぞれ「アニメーション」の下の「ファイルに+記号のアイコン」をクリックしてアニメーションを追加します。そして名前を設定します。

 「swim」には、「ファイルシステム」ドックのart/enemySwimming_1.pngart/enemySwimming_2.pngを順番にドロップします。

 「walk」には、「ファイルシステム」ドックのart/enemyWalking_1.pngart/enemyWalking_22.pngを順番にドロップします。

 そして、それぞれ「アニメーション」の「5.0 フレームレート(FPS)」という入力欄に「3」と入力します。また「Ctrl+S」で変更を保存します。

swimとwalk
swimとwalk

 次に、「Player」の時と同じように「Mob」の画像を小さくします。「Node2D」の「Transform」グループを開き、「Scale」の「x」と「y」の値を「0.75」にします。そして「Ctrl+S」で変更を保存します。

scale
scale

CollisionShape2Dの設定

 次に衝突形状を設定します。

 「シーン」の「CollisionShape2D」を選択します。「インスペクター」の「CollisionShape2D」の「Shape」が「<空>」になっているのでクリックします。そして「新規 CapsuleShape2D」を選択します。

新規 CapsuleShape2D
新規 CapsuleShape2D

 Playerの時と同じように作業をやりやすいようにビューの位置と拡大率を変えましょう。2Dビューの左上にあるUIの、左端にあるボタン(中心ビュー)をクリックします。次に、「+」ボタンを何回かクリックして見やすいサイズに拡大します。

中心ビュー+拡大表示
中心ビュー+拡大表示

 カプセルの向きが縦長なので横向きにします。「インスペクター」ドックの「Node2D」>「Transform」グループを開き、「Rotation」を「90」にします。

90度回転
90度回転

 赤色のハンドルを操作して、青色の領域が次のような状態になるようにします。そして「Ctrl+S」で保存します。

カプセルを調整
カプセルを調整

次のページ
6.Mobのスクリプトの作成

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

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

もっと読む

この記事の著者

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

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

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

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

この記事をシェア

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

イベント

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

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

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

メールバックナンバー