シーンの箇条書き表示

プレイヤーが自由に画面内を移動できるようになった今、その次のステップとして「射撃」システムを実装していきます。

再利用可能なオブジェクト

プレイヤーは試合中に多数の「弾丸」を発射しますが、すべて同一仕様となります。各弾丸は以下の要件を満たす必要があります。

  • プレイヤーのすぐ前方に出現
  • 画面外に到達するまで前進移動
  • 敵キャラとの衝突を検知

すべての弾丸が同じ動作をするように設計されているため、「プロトタイプ」となる基本型を1つ作成すれば、そこから必要な数だけコピーを生成できます。Godotのシーンシステムはこの用途に最適です。

弾丸シーン

メニューからシーン→新規シーンを選択するか、ビューポート上部のタブにある**+**アイコンをクリックすることで、新しいシーンを作成できます。

Playerシーンと同様に、弾丸を正しく機能させるために必要なノードを検討が必要です。ここでも衝突判定用の Area2D コンポーネントを使用することで、物体との接触を検出できます。このため、以下のものが必要になります。

  1. 衝突形状(コリジョンシェイプ):弾丸が物理的に存在していることをシミュレートするため
  2. スプライト:弾丸のビジュアル表示用
  3. 画面外検知メカニズム:弾丸が画面から外れたタイミングで自動的に除去する仕組み

以下にノードの設定を示します。

  • Area2D - このBulletに名前を付ける
    • Sprite2D
    • CollisionShape2D
    • VisibleOnScreenNotifier2D

アセットパックフォルダから、Player_charged_beam (16 x 16).png画像ファイルを、Sprite2Dコンポーネントのテクスチャプロパティにドラッグ&ドロップしてください。

船舶画像と同様に、ここにも複数のバージョンが存在するため、Hframes2に設定し、一度に表示する画像を1つだけにしてください。

CollisionShape2D の形状を、先ほどPlayerシーンで設定した方法と同じように設定してください。

弾丸スクリプト

ノードBulletにスクリプトをアタッチし、移動の基本設定から始めてください。

extends Area2D

@export var speed = -250

func start(pos):
    position = pos

func _process(delta):
    position.y += speed * delta

このスクリプトはプレイヤー用のものと類似しているので、見覚えがあると思います。変更しているのはposition.yだけです。弾丸を垂直に真上へ発射させるためです。

定義したstart()関数に注目してください。これにより、プレイヤーが移動して異なる位置から弾丸を発射するため、弾丸の初期座標を設定することが可能になります。

シグナルの接続方法

次に、bulletノードを選択してから、インスペクターの横にあるノードタブをクリックしてください。

alt alt

これはこのノードが送信可能なすべてのシグナル一覧です。シグナルはGodotで何かが発生したことを通知する仕組みです。この場合、area_entered シグナルを使用することで、この弾丸が他の Area2D ノードに接触するたびに検知できます。

area_entered シグナルを選択し、接続… ボタン(またはシグナル名をダブルクリック)をクリックしてください。表示されるダイアログでは、何も変更する必要はありません。ただ単に接続 をクリックするだけで完了です。

bullet.gdを見てください。新しい関数が追加され、名前の横に緑の「接続中」アイコンが表示されます。これはシグナルがこの関数に接続されていることを示すものです。この関数はエリアが何かに接触するたびに呼び出されるため、ここにコードを追加してください。

func _on_area_entered(area):
    if area.is_in_group("enemies"):
        area.explode()
        queue_free()

ここで弾が敵に当たったかどうかを確認します(詳細は後述)。当たった場合は、敵に対して爆発処理を実行した後、弾オブジェクトを削除します。

以下の手順に従って、VisibleOnScreenNotifier2Dscreen_exited シグナルも接続してください。

func _on_visible_on_screen_notifier_2d_screen_exited():
    queue_free()

次のステップ

これで弾丸シーンは完了です。それでは、プレイヤーに射撃機能を追加していきます。

戻る次へ