Godot3.5で2D弾幕シューティングゲームを作る
https://gyazo.com/06d9d63da83cfbfa5a1df0ff85c37b7e
ブラウザ上でプレイ可能、無料
Godot ゲームエンジンを学習する目的で作成したのでメモる
制作に関するメモ
敵弾幕パターン
宝箱からアイテム抽選システム
今回は基本的に各アイテム同確率で抽選したので、単純にrandi()を使って抽選した
code:gd
ChestItemType.WIDE_SHOT_LEFT:
# 以下省略
被弾したらしばらく点滅にする
死ぬ前に徐々に透明にしていくTweenを挟む
敵が死ぬ際に、alpha値を1 -> 0 に変化する tween を生成し、tween終了後に queue_freeを呼び出す
code:gd
var tween:Tween = Tween.new()
var duration = 0.5
tween.interpolate_property($Sprite, "modulate", Color(1,1,1,1), Color(1,0,0,0),
duration, Tween.TRANS_QUART, Tween.EASE_IN)
tween.interpolate_callback(self, duration, "queue_free")
add_child(tween)
tween.start()
弾のz_indexと自機のz_index
自機の当たり判定は自機中心の小さい範囲に設定しているため、自機と敵の弾が重なった時に自機で弾を隠さないように z_index を調整した。敵の弾が最前面に出るようにしている。
弾幕チェック用のDebugStage
https://gyazo.com/17920e9c2abd3ac271fe76d93b2e6c09
単体で敵の弾幕や移動パターンを確認するための Debug Scene を用意した。
毎回ステージに敵を配置して確認するのは作業効率が低いため
被弾時にカメラを揺らす
AudioStreamPlayer2Dを使うと位置依存の音になる件
2Dゲームだから AudioStreamPlayer2D を選んでしまっていたため、意図せず中心との距離に応じて音が弱まって再生されていた。
ボム使用時の挙動について
ボム使用と同時に敵弾全てを消す処理を追加
ボム使用後は数秒「ボム使用中状態」とし、その間は敵が新たな弾を発生させないようにした