generated at
Godot3.5で2D弾幕シューティングゲームを作る
ブラウザ上でプレイ可能、無料
Godot ゲームエンジンを学習する目的で作成したのでメモる

制作に関するメモ
敵弾幕パターン
宝箱からアイテム抽選システム
今回は基本的に各アイテム同確率で抽選したので、単純にrandi()を使って抽選した
gd
var rand_ChestItemType = ChestItemType.keys()[randi() % ChestItemType.size()] match ChestItemType[rand_ChestItemType]: ChestItemType.WIDE_SHOT_LEFT: # 以下省略
被弾したらしばらく点滅にする
死ぬ前に徐々に透明にしていくTweenを挟む
敵が死ぬ際に、alpha値を1 -> 0 に変化する tween を生成し、tween終了後に queue_freeを呼び出す
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
単体で敵の弾幕や移動パターンを確認するための Debug Scene を用意した。
毎回ステージに敵を配置して確認するのは作業効率が低いため
被弾時にカメラを揺らす
GodotでRigidbody2dのプレイヤーへの衝突検出してCameraをshakeするをベースにして、ダメージ判定時に揺らすようにした
AudioStreamPlayer2Dを使うと位置依存の音になる件
2Dゲームだから AudioStreamPlayer2D を選んでしまっていたため、意図せず中心との距離に応じて音が弱まって再生されていた。
ボム使用時の挙動について
ボム使用と同時に敵弾全てを消す処理を追加
ボム使用後は数秒「ボム使用中状態」とし、その間は敵が新たな弾を発生させないようにした