godot4での弾幕シューティングゲームの作り方について解説しています。ぜひ参考にしてください。
画面の大きさを設定する
まずは、画面の大きさを縦長に設定しましょう。
プロジェクト>プロジェクト設定を開き、その中にある、「ウィンドウ(window)」という項目を探してください。そして、その中にある「サイズ」から、サイズを設定しましょう。サイズは、480×720にしてください。
これで、画面の大きさが縦長になったと思います。
Mainシーンを作る
次に、ゲームのメインとなるMainシーンを追加しましょう。。MainシーンはNode2Dとして追加してください。
そして、その子ノードに「ColorRect」を追加し、Layout>Transformからサイズを480×720と設定してください。色は、「005b5a96」がおすすめです。
Mainシーンは、
Main
ColorRect
という構成になったと思います。
自機を作る
playerシーンを追加する
まずはplayer(自機)シーンを追加しましょう。Area2Dを追加して、「Player」と名前を付けてください。追加したら保存しておいてください。
そして、playerの子ノードに「CollisionShape2D(衝突形状)」、「ColorRect(自機の形)」を追加してください。
現在のシーンツリーは、
Player
CollisionShape2D
ColorRect
となっていると思います。
衝突形状と自機の形を設定する
次に、CollisionShape2DのShapeという項目に、「新規RectangleShape」を追加して、大きさを40×40にしてください。
「ColorRect」は、大きさを40×40にして、位置は真ん中になるように-20,-20にしてください。色は「3aa8ff(薄い青色)」がおすすめです。
自機を矢印キーで動かせるようにする
次に、自機を矢印キーで動かせるようにしましょう。
Playerにスクリプトをアタッチして、以下のようなコードを入力してください。
extends Area2D
var speed = 5
func _physics_process(delta): #動き
if Input.is_action_pressed("ui_right") and position.x <= 480:
position.x += speed
if Input.is_action_pressed("ui_left") and position.x >= 0:
position.x -= speed
if Input.is_action_pressed("ui_up") and position.y >= 0:
position.y -= speed
if Input.is_action_pressed("ui_down") and position.y <= 720:
position.y += speed
extends Area2D
var speed = 5
func _physics_process(delta): #動き
if Input.is_action_pressed("ui_right") and position.x <= 480:
position.x += speed
if Input.is_action_pressed("ui_left") and position.x >= 0:
position.x -= speed
if Input.is_action_pressed("ui_up") and position.y >= 0:
position.y -= speed
if Input.is_action_pressed("ui_down") and position.y <= 720:
position.y += speed
条件分岐の「and ~」のところで、画面外に出ないようにしています。
playerシーンをMainシーンの子ノードにする
次に、今作ったplayerシーンをMainシーンの子シーンとして追加しましょう。
Mainシーンを右クリックして、「子シーンをインスタンス化」をクリックしてください。すると、「子シーンをインスタンス化」という画面になると思います。そこで、playerシーンをクリックすれば、playerを子シーンとして追加することができます。
そして、playerシーンの位置をを240,500にしてください。
ここまで出来たら、Mainシーンをメインシーンとして設定してください。
設定できたら、試しに実行してみましょう。自機を矢印キーで動かすことができると思います。
弾を発射できるようにする
Bulletシーンを追加する
次に、自機から弾を発射できるようにしましょう。
Bullet(Area2D)シーンを追加して、保存してください。追加したら、playerシーンと同じように、衝突形状と形を「CollisionShape2D」、「ColorRect」で設定してください。大きさはplayerシーンの4分の1にしてください。
弾が上に飛んでいくようにする
Bulletシーンを追加できたら、スクリプトをアタッチして、弾が飛んでいくコードを入力しましょう。
extends Area2D
var speed = 20
func _physics_process(delta):
position.y -= speed #上に飛ばす
ただ上に飛ばすだけなので、上のような簡易的なコードで実現できます。
spaceというアクションを追加する
次に、プロジェクト>プロジェクト設定>インプットマップから、新しい「space」というアクションを追加してください。
追加できたら、spaceの中に、スペースキーの入力を追加しましょう。
- 追加されたアクション「space」の左にある「+」ボタンを押す
- 「イベントの設定」という画面が開いたらスペースキーを押す
- 上の画像のような状態になったら、OKを押す
このような手順で、スペースキーの入力を、アクション「space」に追加することができます。
これで、スペースキーが押されたときに、アクション「space」が反応するようになります。
playerシーンから弾を生成する
次に、自機から弾を発射できるようにしましょう。player.gdを、以下のように変更してください。変更するところには黄色い線を付けています。
extends Area2D
var speed = 5
const bullet = preload("res://bullet.tscn") #弾を取得
func _physics_process(delta):
if Input.is_action_pressed("ui_right") and position.x <= 480:
position.x += speed
if Input.is_action_pressed("ui_left") and position.x >= 0:
position.x -= speed
if Input.is_action_pressed("ui_up") and position.y >= 0:
position.y -= speed
if Input.is_action_pressed("ui_down") and position.y <= 720:
position.y += speed
if Input.is_action_just_pressed("space"): #スペースキーが押されたとき
var bullet1 = bullet.instantiate() #弾を生成
bullet1.position = position #弾の位置を自機の位置にする
get_parent().add_child(bullet1) #弾を親から発射する
ここまでできたら、実行してみてください。スペースキーを押すと、プレイヤーから弾が発射されると思います。
ここまでで、第1回は終了です。第2回はこちらです。