アクションゲームの作り方

f:id:eiki_okuma:20171105161250p:plain

(C) Nintendo

 古今東西衰えない人気! ゲームエンジンによって更にお手軽実装!

  • 調理時間 3ヶ月~2年
  • お手軽度 ★★★★☆
  • 物理挙動 ★★★☆☆
  • ネットワーク 不要

材料

キャラクター
オブジェクト
自機含め20~
必要なだけ
地形(背景) ステージ数分
エフェクト 10~必要なだけ
UI メニュー画面・ゲーム画面
効果音/ジングル 30~必要なだけ
BGM ステージ数分+メニュー+EDなど

作り方概要

  1. 平坦なステージで自機のキャラクター挙動を作ります。
  2. 平坦でないステージでキャラクター挙動を更に作りこみます。
  3. キャラクターから出る弾や、攻撃に応じてエフェクトを入れます。
  4. 自機のキャラクター挙動からのキャラクター挙動を分離して作ります。
     - この際、挙動部分は共通させ、操作部分のみ変えるのがコツです。
  5. 地形のテストを始めます。ステージ1を作り、必要な敵(1~5種類)と、ボスまで作りましょう。
  6. 別に作っておいた「UI・効果音」を混ぜます。
  7. シーケンスBGMを入れ、実際のゲームと同等にします。雰囲気を確かめましょう。
  8. メニュー画面を作ります。ゲームオーバーまでの流れを作り、本番と同様のシーケンスを作り上げます。キャラクター成長要素を入れるならこの段階です。
  9. あとは量産です。ステージを増やしながら、新しい敵を作りまくりましょう。
  10. 一通りできあがったら、デバッグをしましょう。
  11. 完成です。

 f:id:eiki_okuma:20171105162354j:plain

 

 

 視点と操作

 個々の作り方に入る前に、大きく分けて3つ存在するアクションゲームの視点と操作について説明します。

横スクロール(2D)

 

 マリオやロックマンに代表される、世界を真横から見るアクションゲームです。海外ではプラットフォーマーと呼ばれます。ジャンプが操作の基軸となるのが特徴で、敵を踏む、穴を飛び越える、梯子に掴まるなど、十字キー左右と一つのボタンで精密にキャラクターをコントロールすることでゲームを優位に進められるという性質を持ちます。

 ベルトアクションなどは三軸ありますが、基本的にはここに属します。

見下ろし

 
 昔のゼルダの伝説などに代表される、世界を上から見下ろした形のアクションゲームです。海外ではトップダウンなどと呼ばれます。町の表現に適しており、どちらかというと RPG でよく採用されます。探索や敵との戦闘をメインとするアクションゲームと良い相性を持ちます。今回は特に取り扱いませんが、基本的には横スクロールの作り方と一緒です。

奥行き(3D)

 
 最近の 3D アクションゲーム全般、古くはマリオ64クラッシュバンディクーに代表される、奥行きのある三次元的なアクションゲームです。臨場感があり、探索からホラー、バトルなど多くのジャンルに応用されてきました。一方で距離感が掴みにくいという慢性的な欠点を抱えており、ジャンプを多用するゲームでは視点やアクションに工夫が必要になってきます。

 

キャラクターの作り方

 f:id:eiki_okuma:20171105163049p:plain

  2Dと3Dで若干違う所もありますが、基本的に作り方は同じです。

自機の作成

  1. 歩行を作ります。コントローラの入力で前後左右に動けるようにしてください。グラフィックは四角い豆腐でOKです。
  2. ジャンプを作ります。このとき、床との当たり判定や壁との当たり判定を作ります。水平な地面からのジャンプと、崖から落ちた時の挙動もしっかり作りましょう。*1
  3. グラフィックを用意します。2Dならドット絵やスプライトアニメ、3Dならモデルです。歩行・ジャンプは動き・歩幅と移動量がきちんと合うようにしましょう。ここでの作りこみが最終的な手触り感に直結します。
  4. 攻撃を作ります。当たり判定を持つ専用のオブジェクトをつくり、射撃なら弾のグラフィックを、打撃なら透明にして自由に出せるようにします。

敵の作成

  1. 自機と同じデータ構造で敵を作ります。スクリプト / プログラムを自分で弄っている場合は、後々の利便性のために自機と敵の基底クラスを同じものにしましょう。
  2. 敵に当たり判定を付けます。先ほど作ったこちらの攻撃が当たるようにします。
  3. こちらの攻撃が当たったときに、画面を揺らしたり、エフェクトを出したりしましょう。気分が盛り上がるからです。内部的に HP を持たせ、0になったら爆発エフェクトと共に敵が砕け散るようにしてみましょう。
  4. ここまできたら一旦敵は置いといて、地形の作成に入ります。地形に目処が付いたら、地形に合わせて敵を歩かせたり、こちらをサーチしたり、独特な攻撃を繰り出してくるようにします。

ボスの作成

  1. ボスは1面の地形ができあがったら作ってください。
  2. 基本的に敵と一緒ですが*2、独自の HP や UI を持ち、ランダムな行動パターンを持ちます。HP の減りや、自機との距離で行動パターンを変えてもよいでしょう。
  3. ボスを倒すと、ステージクリアとなります。ボスを倒したとき、シーケンス側にフラグを渡しましょう。

オブジェクトの作成

  • いわゆるアイテムなどのことです。ロックマンの回復アイテムであったり、マリオのキノコであったり、あるいは敵でも味方でもないNPCキャラクターをここに分類することもあります。
  • アイテムは当たり判定を持ち、自機が触れると消滅するようにしましょう。見た目が不自然なのはエフェクトを足せばOKです。

 

地形の作り方

 f:id:eiki_okuma:20171105163939p:plain

コリジョンディスプレイ

 地形とはゲームにおけるステージや背景のことです。地形はコリジョンディスプレイという二つの要素を持ち、コリジョンとはずばり当たり判定のこと、ディスプレイとは実際の見た目のことを指します。現実世界においてコリジョンディスプレイは完全に一致していますが、ゲームでは「柔らかいもの」、例えば草や水を表現したり、2Dゲームにおける「キャラクターの前」「キャラクターの後ろ」を描画するためにコリジョンディスプレイはしばしば分離します。

2Dステージ

 アクションゲームの2DステージはRPGと同じようにマップチップと呼ばれる小分けにされたグラフィック素材の組み合わせで作られます。

 データは全ての要素が格子状に並べられるグリッド形式と、そうではないフリー配置の2パターンがあります。後者の方が自由な配置ができますが、制作コストやレベルデザインのコストが増大するため、基本的には前者にするべきでしょう。両方を切り替えられる仕様にするのがベターです。

  1. 地形はコリジョンから作ります。ベタ塗りのデバッグ描画を使って、テストステージを作りましょう。自機の身長やジャンプする高さ、最大飛距離を調整し、「基本段差」を決定します。
  2. 斜めの床はしばしば開発者の頭を悩ませるものです。天井も同様です。色んな形の地形を作り、不自然な挙動がないようにしましょう。また、極端な角など「こういう作り方はしない」地形を決めてしまうのも常套手段です。(マリオメーカーのようなゲームで無い限り、全てに対応するのはコストが掛かってしまうだけです)
  3. 一通り検証が終わったら、ディスプレイの部分を作ります。グリッド形式なら悩むことは少ないでしょう。コリジョンにかぶせるようにして床を作っていきます。ステージ1の叩き台はさっと作ってしまうのがよいでしょう。
  4. ステージの形に目処がついたら、装飾部分のディスプレイを作ります。ステージの手前、奥、そして最奥の背景です。ゲームプレイが阻害されないよう、装飾部分のディスプレイは彩度や明度を落とすのが基本です。

ゲームエンジン以外で作る場合、データの持ち方は悩み所です。一番簡単なのは CSV に位置(x,y)と大きさ(w,h)、そしてマップチップの ID を付けたものを羅列してしまうことです。力技に見えるかもしれませんが、大体全てこんな感じです。

3D地形

 3D のステージは全てモデリングで作られます。基本的にステージ上に配置され、動かないもの*3は一つのモデルで作ってしまうことも多いです。まあ、重いですが。

 こちらも同様に、コリジョンディスプレイが分かれます。マインクラフトでもない限り 3D の地形を立方体で構成することはできないので、基本的にグリッド形式は採用できませんが、基本段差などを作るのは一緒です。コリジョンディスプレイがズレていると2D以上に気になるので、基本的にはコリジョンに使ったモデルを流用してディスプレイを作っていくのがよいでしょう。

 細かい作り方は 2D ステージと一緒です。

地形オブジェクト

 f:id:eiki_okuma:20171105164343j:plain

 地形上に置かれる様々なモノを総称して地形オブジェクトと呼びます。地形と地形オブジェクトの違いは、基本的には「動くかどうか」です。例えば、以下のものはオブジェクトとして作ります。

  • 動く床
  • 開閉する扉
  • 風で揺れる木
  • 水、川
  • 進行状況によって消えたりする岩
  • 調べられる看板
  • その他、近寄ったり触れるとギミックが発動する何か

 プログラム / スクリプトによってどうにかしたいモノは、オブジェクトとして取り扱うということですね。オブジェクトは、2Dならマップデータで直接置いてもいいですが、3Dの場合は大抵目印のようなものを配置してそこに生成したり、Unity などのゲームエンジンならばエディター上で配置します。 

f:id:eiki_okuma:20171105164259p:plain
ワンワンは地形オブジェクトでしょうか。微妙なラインです。スター状態で倒せるなら敵キャラですが、スター状態で吹っ飛ばすに留まるマリオカートでは地形オブジェクトとして置かれているでしょう。

 さて、ここまでできればステージ1をそれなりにゲームっぽく仕上げられたのではないでしょうか。心行くまで細かく調整し、納得いく仕上がりにしましょう。上手くいけば、この時点で楽しげなものになってきたはずです。

 

UI・シーケンスの作り方

 f:id:eiki_okuma:20171105170251p:plain

 UI・シーケンスは最小限必要なものから作っていきましょう。どうせ気に入らないものは後で作り直すことになるので、製作過程で必要になっていくにつれ順番に作っていくとスムーズです。

 シーケンスとは簡単に言えば画面遷移の制御や順序のことで、メニュー画面からボタンを押すとゲーム画面に行ってステージ1が始まる~という流れのことです。これも、UIとは切っても切り離せないものなので、一緒に考えていきましょう。

ゲーム画面

  1. HP ゲージを作ります。
  2. (必要に応じて)技ゲージ・ENゲージなどを作ります。
  3. 敵用の HP ゲージを作ります。
  4. その他、必要に応じてダメージやコンボ数、ゲームに必要な画面上のUIを作っていきます。
  5. デザインを本番相当にし、調整します。ステージ1を通して、本番のゲーム画面がどのように見えるか色々試してみましょう。

シーケンス

  1. タイトル&メニュー画面を作ります。メニューはとりあえずスタート・コンフィグくらいで良いと思います。
  2. ゲームオーバー画面を作ります。ゲームオーバーの後はタイトルに戻ります。
  3. ステージクリア画面を作ります。ステージクリア後は次のステージに進みます。
  4. ポーズ画面を作ります。ポーズから再開、ポーズからタイトルへ戻る、を実装します。
  5. ゲームクリア画面を作ります。ゲームクリア後はタイトルに戻ります。
  6. メニュー画面のほかの項目の中身を作ります。
  7. これで一連のシーケンスが整いました。中身はこれから詰めておくとして、早い段階でシーケンス全てを結びつけてしまうのは開発においてとても有用です。

TIPS

  • UIの鉄則として、全てのゲーム的処理や情報はUIではなくキャラクターやゲームマネージャーなどに持っておき、UIはその情報を「読み取るだけ」にしましょう。UI側で値を弄ったりしてゲームオブジェクトに影響を与えると、デバッグ時にとても追いにくいコードになってしまうからです。
  • UIデザインはアニメーションにも注目しましょう。個人製作でUIアニメーションを実現するのはハードルが高いですが、これをこなすと一気にクオリティが商業製品に近くなります。

 

BGM・効果音の作り方

 割愛します。なぜなら、他のゲームジャンルとやることは一緒なのと、BGM・効果音の作り方はそこらへんに沢山転がっているからです。BGMは借りてきてもいいですね。

 個人的に気をつけていることといえば……

  • 音量バランスはしっかり見ましょう。特に効果音。音の聞こえ方による距離感も大事です。
  • 楽曲は、メニュー~ステージセレクト~ステージ道中~ボスと、一連のシーケンスで一曲が完成するようなイメージで作ります。ボスがサビです。*4
  • 効果音を取り扱うなら、簡単なシーケンサーは扱えた方が好ましいです。既存の効果音から一部分を切り取るだけでも、全く違った効果音を作ることができます。

 

まとめ

 以上が、アクションゲームの簡単な作り方です。アレンジ次第でどんなゲームでも作れるので、頑張って作ってみてください。何か質問がある方はコメント欄にお気軽にどうぞ。

 

応用レシピ

 関係ありそうな記事をここに追加予定。

 

 

 

参考になりそうな最近のゲーム

ニーア オートマタ - PS4

ニーア オートマタ - PS4

 

 

 

*1:ジャンプは基本的に「接地」「ジャンプ上昇中」「ジャンプ下降中」の3つの段階で制御します。崖から落ちた時はいきなりジャンプ下降中になります。

*2:敵を継承する形で作ります

*3:道や岩など。木は風で動く可能性があるので、地形オブジェクト(後述)として分けられることも多い

*4:そのため、BGMを借りてくるのは実はあまりお勧めしません