現在開発中のアプリ「弾律 -Danritsu-」は、リアルタイムで流れる弾を強化しながら敵に届ける調律型弾幕アクションゲームです。 本記事では、その中核を成す「弾を育てて調律する」というコンセプトと、実装面でのグリッド処理の仕組みについて解説します。
コンセプト:弾を“選ぶ”のではなく“育てて調律する”
従来のシューティングとは異なり、「弾を撃つ操作」はプレイヤーが直接行いません。代わりに、弾が通過するルート=グリッドを編集・調整することで、最終的な弾種や威力・速度が変化していきます。
グリッドはランダム生成され、通過するタイルに以下のような効果があります:
タイルタイプ | 効果 | 備考 |
---|---|---|
DamageUp | 弾のパワーを上げる | 複数通過で Spread に進化 |
SpeedUp | 弾の速度を上げる | 連続通過で Fast に進化 |
UpSlope / DownSlope | 通過方向を分岐させる | 攻撃or防御ルートに関与 |
DeadLine | 通過保障タイル(壊れない) | 外周に配置される |
タイルの種類・向き・耐久性はランダムですが、戦略的に「方向制御」や「強化の誘導」が可能です。
弾の強化ロジックとグリッド処理(コード解説)
弾は BulletMover.cs
にてグリッド内を進行し、通過したタイルの種類をもとに BulletData
が更新されていきます。
BulletData.cs
public static BulletType GetBulletTypeFromCounts(int damageCount, int speedCount)
{
if (damageCount >= 6) return BulletType.Spread;
if (speedCount >= 6) return BulletType.Fast;
if (damageCount >= 3 && speedCount >= 3) return BulletType.Homing;
return BulletType.Normal;
}
→ 弾が通ったタイルの種類をカウントして、最終的な弾種(Normal / Fast / Spread / Homing)を決定します。
BulletMover.cs 抜粋(タイル通過処理)
PuzzleTile tile = gridManager.GetTileAt(tilePos.x, tilePos.y);
switch (tile.config.type)
{
case TileType.DamageUp: passedDamageCount++; break;
case TileType.SpeedUp: passedSpeedCount++; break;
}
fixedType = BulletData.GetBulletTypeFromCounts(totalDamage, totalSpeed);
→ 弾の通過によって内部的にステータスが蓄積されていき、最終地点で「攻撃 or 防御」に振り分けられます。
GridManagerとタイル配置の制御
GridManager.cs
は10×5のマスを生成し、各タイルには PuzzleTile.cs
が割り当てられます。タイルの種類や耐久性はランダムですが、上下の端には DeadLine
タイルを配置することで最低限の弾の通過ルートを保証しています。
今後はこのグリッドに「建築系タイル」や「デッキビルド要素」を加え、より戦略的に弾道を調律していく仕組みを導入予定です。
次回は:**各タイルタイプの挙動詳細(特に方向分岐と耐久)と、それをどう使いこなすか?**について解説予定です。
コメント