ゲーム内の「強化演出」は、プレイヤーの満足感やリプレイ性に直結する重要な要素です。
EVADRONEでは、グリッド上を移動する強化アイコンが、レベルアップ用オーブや一時的なブーストオーブを取得することで、タレットにパワーアップ効果を付与しています。
この記事では、GridManager.csとTurretIconMover.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回)は、爆発エフェクト・エネルギー消失などの“細かい演出”の連携について解説します。短時間の演出でも没入感を高めるために行っている工夫を紹介していきます。
コメント