【Unity 2D攻撃設計】EVADRONEにおける弾種のバリエーションと被弾処理の差別化

Movie

2Dシューティングやタワーディフェンス系の設計では、弾種ごとに違った特性とエフェクトを持たせることで、視覚的にも戦略的にも多様性を演出できます。
EVADRONEでは、以下の4種類の弾を実装し、それぞれに異なる速度、ダメージ、エフェクト演出を与えています。


弾の種類一覧と特徴

弾種タグ特徴ダメージ
通常弾"Normal"標準的な速度とサイズ0.1
拡散弾"Spread"複数方向に発射される小弾0.03
高速弾"Fast"細く速いが命中しづらい0.12
ホーミング弾"Homing"緩やかに追尾0.03

OnTriggerEnter2Dでタグ判定&ダメージ処理

void OnTriggerEnter2D(Collider2D other)
{
float damage = 0;
switch (other.tag)
{
case "Normal": damage = 0.1f; break;
case "Spread": damage = 0.03f; break;
case "Fast": damage = 0.12f; break;
case "Homing": damage = 0.03f; break;
default: return;
}

TakeDamage(damage);
Destroy(other.gameObject);
}
  • タグによるシンプルな弾種分岐
  • TakeDamage()を通じてHP更新+ギアUIも連動

弾ごとのエフェクト生成とランダム演出

弾が命中した際にはBullet.cs内でhitEffectPrefabを生成します。
各エフェクトは、ランダムな回転とスケールを持ち、繰り返しでも飽きにくい表現を可能にしています。

if (hitEffectPrefab != null)
{
float rotation = Random.Range(0f, 360f);
float scale = Random.Range(0.05f, 0.1f);
GameObject effect = Instantiate(hitEffectPrefab, transform.position, Quaternion.Euler(0, 0, rotation));
effect.transform.localScale = Vector3.one * scale;
}

このHitEffectオブジェクトは、HitEffect.csで自動的に縮小&削除されます:

transform.localScale = Vector3.Lerp(initialScale, Vector3.zero, t);

シールド貫通と非貫通の差別化演出

ドローンは常時シールドを纏っており、弾がこれに接触すると防がれます。
DroneShield.cs内で同様にタグ判定を行い、ヒットエフェクトだけ表示して弾を削除します:

void OnTriggerEnter2D(Collider2D other)
{
if (other.CompareTag("Normal") || other.CompareTag("Spread") ||
other.CompareTag("Fast") || other.CompareTag("Homing"))
{
Destroy(other.gameObject);
Instantiate(shieldHitEffectPrefab, transform.position + transform.right * hitEffectOffset, Quaternion.identity);
}
}

技術的応用:難易度による弾種の組み合わせ

タレットや敵の種類ごとに、発射弾種を変えることで以下のような演出が可能です:

  • 初期ステージ:Normalのみ
  • 中盤以降:Spreadを交えることで回避の難易度上昇
  • ボス戦:FastHomingを組み合わせた連携攻撃

次回は、タレットの強化演出(レベルアップやブースト)と、それを支えるグリッド移動+オーブ収集の仕組みについて掘り下げます。

コメント

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