【Unity×強化演出】EVADRONEにおけるタレット強化とグリッド移動システムの実装

Uncategorized

ゲーム内の「強化演出」は、プレイヤーの満足感やリプレイ性に直結する重要な要素です。
EVADRONEでは、グリッド上を移動する強化アイコンが、レベルアップ用オーブ一時的なブーストオーブを取得することで、タレットにパワーアップ効果を付与しています。

この記事では、GridManager.csTurretIconMover.csによるロジック制御の仕組みと、拡張しやすい設計について解説します。


グリッド管理:5×5のシンプルな空間分割

まず、GridManager.csにて、SpriteのBoundsをもとにグリッドを構築します。

void SetupGrid()
{
Bounds bounds = squareRenderer.bounds;
cellSize = new Vector2(bounds.size.x / width, bounds.size.y / height);
gridOrigin = bounds.min;
}

実装のポイント:

  • 画面の実寸に合わせてセルサイズを自動算出
  • ワールド座標⇔グリッド座標の変換関数 GetWorldPosition() を提供
public Vector3 GetWorldPosition(Vector2Int gridPos)
{
return gridOrigin + new Vector3((gridPos.x + 0.5f) * cellSize.x, (gridPos.y + 0.5f) * cellSize.y, 0f);
}

タレットアイコンのランダム移動と衝突検出

タレットの強化処理は、TurretIconMover.cs により制御され、定期的に上下左右のいずれかへ移動します。

InvokeRepeating(nameof(MoveRandomly), 1f, 0.5f);
Vector2Int[] directions = {
Vector2Int.up, Vector2Int.down, Vector2Int.left, Vector2Int.right
};
  • 現在位置 currentPos をベースにランダム方向へ移動
  • 画面外にはみ出さないよう Clamp を使って制限

オーブとの接触処理と強化ロジック

移動後のグリッド位置が、オーブの座標と一致した場合に、強化処理を発動します。

if (currentPos == gridManager.GetOrbPosition())
{
turret.LevelUp();
gridManager.SpawnOrb();
}
if (currentPos == gridManager.GetBoostOrbPosition())
{
turret.ActivateBoost();
gridManager.SpawnBoostOrb();
}
  • Orb: 恒常的なレベルアップ
  • BoostOrb: 一定時間だけの強化(例:連射速度アップ)

turret.LevelUp()ActivateBoost()は、TurretController内で機能実装


技術応用:アイコンとオーブの可視化

  • アイコンは iconVisual を使って独立表示し、UIとしても視認性を確保
  • オーブは orbPrefab / boostOrbPrefab をランダムにスポーン

応用アイデア(実装可能):

  • 取得時にパーティクルエフェクトを追加
  • ブースト効果時間をUI上に可視化(ゲージ or 数値)

⚙️ 拡張性の高い設計とは

機能スクリプト拡張のしやすさ
グリッド構成GridManager.csグリッドサイズ変更も一行で対応可能
アイコン移動TurretIconMover.cs方向や移動頻度をパラメータ化しやすい
オーブ処理TurretController強化内容を関数で分離して再利用可能に

次回(第5回)は、爆発エフェクト・エネルギー消失などの“細かい演出”の連携について解説します。短時間の演出でも没入感を高めるために行っている工夫を紹介していきます。

コメント

タイトルとURLをコピーしました