【Unity 2D演出設計】爆発・透明化・縮小アニメ:軽量エフェクトの実装で没入感を高める

Uncategorized

2Dゲームにおいて、「演出の質」はプレイヤー体験に直結します。
特に短時間で終了する「爆発」や「ヒットエフェクト」などは、地味ながら世界観を支える重要な要素です。

本記事では、EVADRONEにおける以下の演出を支える軽量スクリプト設計を紹介します:

  • 爆発アニメーション(ExplosionShrink.cs
  • 残像の透明化(GhostFade.cs
  • シールドヒットの瞬間演出(ShieldHitEffect.cs

爆発演出:スプライトのスケールを縮小させて消滅

// ExplosionShrink.cs
void Start()
{
initialScale = transform.localScale;
Invoke(nameof(StartShrinking), delayBeforeShrink); // 少し遅れて収縮開始
}
void Update()
{
if (!shrinking) return;

timer += Time.deltaTime;
float t = Mathf.Clamp01(timer / shrinkDuration);
transform.localScale = Vector3.Lerp(initialScale, Vector3.zero, t);

if (t >= 1f)
Destroy(gameObject);
}

特徴:

  • 爆発の収縮感をスケーリングで再現
  • delayBeforeShrinkにより膨らんだ後→収縮のような自然な見た目に

残像エフェクトのフェード処理

// GhostFade.cs
float alpha = Mathf.Lerp(initialColor.a, 0f, timer / fadeDuration);
sr.color = new Color(initialColor.r, initialColor.g, initialColor.b, alpha);
  • ゴーストのSpriteRendererを徐々に透明にし、一定時間後に削除
  • 残像用プレハブはDroneControllerで定期生成され、Queueで管理されている(最大表示数を制御)

効果:

  • ドローンのスピード感が際立つ
  • メモリ効率も保ちつつ、演出的リッチさを実現

シールドヒット時の一瞬の演出

// ShieldHitEffect.cs - Start()
float scale = Random.Range(minScale, maxScale);
transform.localScale = Vector3.one * scale;
transform.rotation = Quaternion.Euler(0f, 0f, Random.Range(0f, 360f));
// Update()
transform.localScale = Vector3.Lerp(initialScale, Vector3.zero, t);
  • シールドに接触した瞬間にエフェクトを表示
  • 毎回ランダムな回転・サイズを持ち、被弾時の印象がマンネリ化しない

設計面のポイント

演出スクリプト実装手法メモリ効率
爆発ExplosionShrink.cs遅延収縮で自然な爆発表現◎(短命)
残像GhostFade.cs透明度フェード+Queue制御◎(最大数制限)
シールドヒットShieldHitEffect.csランダム演出+収縮消滅

応用例:共通の「収縮して消える」処理のテンプレート化

ShrinkAndDestroyBaseのような抽象クラスを用意すれば、今後のエフェクトにも簡単に適用可能です。
たとえば以下のようなベースクラスを作り、ExplosionShrinkShieldHitEffectで継承可能。


次回はまとめとして、プロジェクト全体のアーキテクチャ設計・連携構造と応用方法について解説予定です。

コメント

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