RPG 戦闘システム開発記録
Unity の RPG プロトタイプで、角色アニメ・エフェクト・連撃・shader をどう束ねたか。実験の中で学んだことの記録。
私はずっと「動作のリズム」と「打撃感」に敏感だった。
格闘ゲームが得意だからではない。むしろ、角色が手を出した瞬間に、画面が適切な「溜め・回饋・空気感」で応えてくれたら——ただダメージ数字が出るより、ずっと本物らしく感じられるのでは、とよく想像していたからだ。
だからこのプロトタイプを始めた。ゲームを完成させるためではなく、打撃設計・スキル演出・アニメの組み合わせ・出力回饋・画面の手触りを「載せられる」基本戦闘システムを組むため。以下はその開発思考の記録。
私は「アニメ制作」からではなく、角色の戦闘リズムの想像から入る。頭の中で三連撃のリズムを描く。
Unity の Animator で各動作のステートマシンを組み、combo buffer と animation tag による判定で入力タイミングの容錯と自然な接続を実現した。ここで大事なのは単に「アニメを再生する」ことではなく、入力とリズムの間のロジックを制御可能・可視化された状態に保つことだった。
dash 攻撃を作っていて気づいた——角色を移動させるだけでは「体を突き抜けた」感覚は出ない。そこで重ねたのが次の要素。
加えて「空間属性の魔法」も試作した。敵を壁抜け状態にし、壁越しに敵の存在を表示する専用 shader を使う——将来の「場景型魔法」の基礎表現として。
私は美術畑ではないけれど、主人公を既製モデルではなく、自分の思考と表現を宿したものにしたかった。
そこで初めて VRoid Studio を使い、髪の毛の分け方から描き始め、主人公のテクスチャ作成にも挑戦した。髪型のレイヤー分けは、実は角色設計の構造そのもの——どこにリズムを置き、どこを締め、どこで個性を出すか。私にとってそれも「打撃感とリズム」の一部で、ただ角色の体の上に描いているだけだった。
私は「強い角色」を硬く書くのではなく、「再利用できる Combo / Skill システムをどう作るか」から構想した。狙いは次のとおり。
これらはいわば「戦闘の言語」の核。おかげで角色を書くたびに、文法を毎回書き直すのではなく、「文」を組み合わせて違う戦闘スタイルを作れるようになった。
実装中は、状態ごとのパラメータを Inspector に出して調整できるよう設計した。値を見ながら触れるので、開発中の手戻りが減り、保守もしやすい。
void Attack()
{
// Input → fire the combo: lock movement, arm the ice-magic colliders,
// swap to the "attacking" material, then let the Animator drive the swing.
if (Input.GetKeyDown(AttackInput))
{
_movementControll.stopMove = true;
MaterialChange(0);
anim.SetTrigger("Attack");
}
// While the DashAttack state plays, glide toward the locked-on target
// (or the nearest enemy) with a tween instead of physics.
if (anim.GetCurrentAnimatorStateInfo(1).IsName("DashAttack") && !StopDashAttack)
{
if (_camControll.lockOn)
transform.DOMove(Target, DashAttackTime);
else
transform.DOMove(transform.position + transform.forward * DashAttackRange,
DashAttackTime);
}
}このデモを完成したゲームにするつもりはない。でも、ここから角色の動作・スキル設計・画面のリズムを「掌握する力」を育てたい。
打撃感はエフェクトと音の足し算ではなく、入力のリズム・敵の反応・動作の切り替え・視覚の回饋から少しずつ組み上げるもの。これが今の私の「戦闘システム」理解であり、はじめて自分のロジックとスタイルで作ったアクション開発作品でもある。