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
を交えることで回避の難易度上昇 - ボス戦:
Fast
やHoming
を組み合わせた連携攻撃
次回は、タレットの強化演出(レベルアップやブースト)と、それを支えるグリッド移動+オーブ収集の仕組みについて掘り下げます。
コメント