概要
バリアージシステムは、専用の実行アクション「バリアージ弾を発射(FireBarrageBullet)」を使用して、最小限の機能しか持たない極めて軽量な弾を発射するシステムです。
一度に数百発の弾を発射できますが、機能は非常に限定されています。弾自体にビジュアルスクリプトを割り当てたり、アニメーションを適用したりすることはできません。
バリアージ弾との接触は、専用の条件「バリアージ弾と衝突(CollideWithBarrageBullet)」を通じてしか検出できません。通常の攻撃衝突検出や壁衝突検出では検出できません。
複雑な挙動を必要とする弾については、代わりに通常の「弾を発射(Fire Bullet)」アクションを使用してください。
「バリアージ弾を発射」でできること
- 発射タイプを全方向、連射、ショットガンから選択。
- 発射原点を指定。
- 発射対象を指定。
- 発射後の挙動を直進、曲線、方向転換、分裂、ホーミングから選択。
- 弾のスプライトを指定。
- 弾は移動方向に基づいて自動的に回転し、**0度(右方向)**を前方として扱う。
- 弾の速度(発射後の加速・減速を含む)を指定。
- ヒットボックスのサイズと衝突レイヤーを指定。
- 弾の攻撃力と属性を指定(ただし、ダメージ処理は自動で行われず、手動で設定する必要があります)。
「バリアージパターン」の作成例
「花のパターン」
全方向+曲線弾を使用して複数の弾を同時に生成。
反対方向の曲線角度(例:+0.3度と**-0.3度**)を設定することで、きれいな花のようなパターンを作成できます。
回転を加えると、洗濯機のようなパターンになります。
「グリッドパターン」
複数の連射+直進弾を使用し、発射原点のオフセットをずらす。
方向転換や分裂を追加すると、興味深いバリエーションが生まれます。
「プレイヤー照準」
プレイヤーを対象に設定。
オフセットを加えることで、意図的にプレイヤーを外れる弾(「狙い外し弾」)を作成でき、ホーミング挙動を追加すると予測的な「先読み弾」になります。
バリアージとスクリプティング
バリアージシステムで生成された弾には、スクリプトを付与できません。
代わりに、すべての挙動は、衝突を検出するオブジェクトのスクリプト内に、「バリアージ弾と衝突」条件を使用して実装します。
「バリアージ弾と衝突」でできること
- オブジェクトのHitAreaとバリアージ弾のヒットボックスとの接触を検出。
検出は、HitArea2Dレイヤーマスクがバリアージ弾のレイヤーと一致した場合に発生します。 - 接触時にバリアージ弾を削除(爆弾やプレイヤーダメージに有用)。
- バリアージ弾が削除された際、指定された確率に基づいて別のオブジェクトやGodotシーンに変換可能(主に爆弾で使用)。
- 接触したバリアージ弾の攻撃力と属性を指定された変数に格納。
「バリアージ弾と衝突」の実用例
「爆弾」
バリアージ弾レイヤーと一致するHitAreaを持つゲームオブジェクトを作成し、爆弾の攻撃範囲とします。
(※少し複雑ですが、AttackAreaでは接触検出できません。)
ビジュアルスクリプトを使用して、HitAreaは爆発タイミングのみ有効になり、その後消滅するように設定。
爆発後、接触したバリアージ弾を削除するオプションを有効にした「バリアージ弾と衝突」条件を設定。
- 爆弾でバリアージ弾を削除し、スコアアイテムを生成する場合
ドロップアイテムを指定。この変換プロセスは通常のゲームオブジェクト生成と同等の処理コストを伴うため、一度に多数のアイテムを生成するとパフォーマンスが低下しやすくなります。ドロップ率は**10%**程度と低めに設定することを推奨します。 - 爆弾で敵にもダメージを与える場合
通常通りAttackArea2Dと攻撃力を設定し、同時に標準のダメージ処理を適用します。
「グレイジング」
グレイジングを処理する専用のゲームオブジェクトを作成し、子ノードにします。
- グレイジングオブジェクトの設定
親オブジェクトより大きなHitAreaを設定。
ビジュアルスクリプトを使用して、「バリアージ弾と衝突」がトリガーされた際に、グレイジングアニメーションやパーティクルを再生し、スコアを増加させるなどの挙動を設定します。
「バリアージダメージ/属性処理」
標準のダメージシステムは使用できないため、ダメージ処理は手動で設定する必要があります。
格納:
- バリアージダメージを変数Aに
- バリアージ属性を変数Bに
- 単純なダメージ適用
ダメージ処理ステートで、「変数Aの値だけHPを減少させる」などのロジックを設定。 - 属性ベースの効果適用
「変数Bが指定値と等しい場合」などの遷移リンク条件を使用して、挙動を分岐させます。