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
のような抽象クラスを用意すれば、今後のエフェクトにも簡単に適用可能です。
たとえば以下のようなベースクラスを作り、ExplosionShrink
やShieldHitEffect
で継承可能。
次回はまとめとして、プロジェクト全体のアーキテクチャ設計・連携構造と応用方法について解説予定です。
コメント