Shader と URP で作る Dash Attack のリズム
shader は分からない。でも「どの一瞬に感覚が要るか」は分かる。一格ずつ試して組み上げた dash 演出の記録。
最初から、ただの装飾エフェクトを作るつもりはなかった。プレイヤーが操作した瞬間、「いま角色が何をしているか」が自然に伝わること——それが狙いだった。
shader は正式に学んでおらず、URP も初めて。だから dash 攻撃の流れは、全体が「非典型だが実用的」なやり方の積み重ねでできている。
dash の開始で、私はアニメを引っ張るのではなく、角色そのものを消したかった。shader graph に _Alpha を制御する float を作り、それを Animator で動かす。
角色が消えると、画面は自然と「予想外」のリズムの空白に入り、次の動作を予告する。きれいなエフェクトのためではなく、「本当に一瞬ブレた」という錯覚を作るため——予告なく通常のリズムから飛び出し、プレイヤーの心理を緊張させる。
角色が dash を始めると、URP の後処理 volume で魚眼の圧縮効果をかけ、画面中央をわずかに押し広げる。視覚の gimmick ではなく、「空間を締める」——いま高速動作に入っている、という宣言だ。
全体の流れはこう:角色が消える → 画面が圧縮される → カメラが寄る——静から動への起手転場。
dash の終点は元の位置ではなく、敵の正面。角色が再び現れる瞬間に shader を差し替え、光の縁取りで「光が弾けた」ように見せ、同時に画面を一度震わせる。
カメラはバインドで角色に貼り付けるのではなく、script で角色の位置を常に計算し slerp で寄せている。だから角色が敵の前へ瞬間移動しても、カメラは硬く cut せず、目標位置へ滑らかに滑り込む——「背後に貼りつく」打撃の臨場感が生まれる。
これは元々カメラ系統が「計算式の追従」だったことの副産物でもある。dash の移動がカメラを新しい位置へ引っ張り、結果として「ゆっくり貼り直す」動きが生まれた。
攻撃後はすべての shader / volume 効果を戻し、角色は構えを収め、画面から余計な動きを消す。この静けさは技術的処理ではなく、リズムを地面に着地させるため——「いま技は終わった、次はあなたが決める」とプレイヤーに伝える間。
timeline や特別な VFX ツールは使わず、次の方法だけで組んだ。
実装中の hardcode を避けるため、状態ごとに 1 組の material を用意した。切り替えは一行で全体の効果が決まり、後からの変更も楽になる——shader コードを書かずに、設定済みの material を差し替えるだけで攻撃態のアニメ同期演出ができる。
この dash combo は業界標準の作り方では決してない。でも、一格ずつ試し、頭の中の画面を組み直して作ったものだ。
もしあなたも初心者 / 一人開発者 / shader に不慣れでも、画面・直感・想像があるなら——あなただけの打撃感は作れる。