制作の流れを整理してみるまとめ記事です。FPSというと海外では非常に人気のあるジャンルですが、日本ではまだまだ「ゲーマーがやるゲーム」という感じでマイナーです。国産のFPSというと数えるほどしかありませんし、自作FPSにいたっては滅多に見かけることがありません。姉妹サイト「Unityでゲームを作ろう!」のFPSの作り方講座のアクセスを見てみると意外と閲覧されているので、「FPSを作りたい」と思っている人は一定以上いることがわかります。「作ってみたいけど作り方がよくわからん」という方が多いのではないでしょうか?そこでここでは前述の通り、UnityでのFPS制作で作る必要がある機能や制作の流れなどを紹介していきます。※Unityの機能説明も含めた「具体的な作り方の手順」を知りたい方は、↑の姉妹サイトのほうをご覧ください。※熱中して書いたのでかなりの長文です。弾の発射・リロード武器切り替え・ADS等アイテム取得処理AIで自動行動する敵キャラクターFPS制作の流れおわりに:FPSを作るのは楽しいぞ!そもそもFPSってなに?まずはじめに、そもそもFPSって何?という部分を簡単に説明しておきます。Shooter」の略で、日本語で言うと「一人称視点シューティング」です。どんなゲームなのかについては文章で説明しても分かりづらいので、下のゲーム画面の例をご覧ください。FPSのゲーム画面の例(※私が以前制作していたゲーム)まあ非常にザックリ言うと自分の目線で見たようなゲーム画面で銃を使って敵を倒すという要素を持った3Dゲームを指すゲームジャンルですね。自分視点なので、プレイヤーキャラは銃と腕くらいしか表示されないのが特徴です。FPSの制作難易度についてでは、ここからFPSを作るというテーマに切り込んでいきましょう。はじめに「FPSは簡単に作れるのか?」という疑問にお答えしておくと、個人的な意見としてはシングルプレイFPSなら比較的簡単に作れると思っています。シングルプレイFPSなら簡単に作れる!その理由は?このように言える理由としては次の3つが挙げられます。アクションゲームに近いから。→Unityでアクションゲームを作るのは簡単。海外では人気ジャンルなので、アセットが充実しているから。→一から自作しなくても良いシングルプレイであればネットゲーム制作の知識が必要ないから。→ネットゲームを個人制作するのはかなり難しい。一つ目の理由は、FPSはアクションゲームに近いのでUnityで作りやすいからです。Unityは物理演算機能が充実していてアクション要素の強いゲームを作るには最適です。FPSも実質3Dアクションゲームにシューティング要素がくっついたようなものなので、割と作りやすいといえます。次に二つ目はFPS用のアセットが充実しているからです。アセットストアを覗けば無料のFPSアセットも色々ありますし、お金を出せば高度な機能があるFPSテンプレートを購入することもできます。一から自分で作らなくても良いというメリットがあります。最後に三つ目の理由は、シングルプレイFPSならネットゲーム制作の知識が不要だからです。これについては↓で説明しますね。シングルプレイFPSとマルチプレイFPS何となくわかると思いますが、他のジャンルと同様にFPSにもシングルプレイFPS:一人で遊ぶFPSマルチプレイFPS:オンラインで多人数で遊ぶFPSの2種類があります。ゲーム制作の観点から言うと、この2つの大きな違いは次の通りです。シングルプレイFPS:ゲームを面白くするためには敵AIの制作技術が必要。AIといっても(ゲーム内容にもよるが)簡易的なAIで十分事足りる場合が多い。マルチプレイFPS:対人対戦のときはAIは不要だが、ネットゲーム制作の知識がないと作れない。先ほども少し書いた通り、ネットゲーム制作は個人だと難しいです。上のほうでは「シングルプレイFPSなら簡単に作れる」という言い方をしました。次に、シングルプレイFPSに求められる機能を整理しておきます。主な機能を挙げると次の通りです。一人称視点のプレイヤーキャラクターまず、FPSというからには一人称視点のプレイヤーキャラクターを作る必要があります。この一人称視点のプレイヤーキャラには、一般的にはマウス移動=視点移動WASD、もしくは方向キー=前後左右に移動というような動きをさせることが多いです。この辺は文章で書いてもよく分からないと思うので、ピンとこない方は実際にFPSをやってみるのをお勧めします。Assetsの中にサンプルがあるので、初めての方はそのC#スクリプトを見てみると良い勉強になるのではないかと思います。自作できそうになければ最悪それをそのまま使っても良いですし、アセットストアにはもう少し高度なキャラクターコントローラーもあるので、そちらを使ってみるのも一つの手かもしれません。弾の発射・リロード次にFPSであれば武器から弾を発射したり、リロードモーションをつけたりしたいものです。そこでその辺について少し詳しくお話しておきましょう。弾の発射処理について弾の発射処理の2つの方式まず、弾の発射処理についてはやり方が2通りがあります。処理を軽くしたいならレイという風に考えてもらえばOKかなと思います。弾の同時発射数やバラつき等の実装それから弾の発射については、次の機能(※私は「シューティング4要素」と呼んでいます)を実装しておくと武器のバリエーションを作りやすくなります。具体的な例を挙げると、アサルトライフル:同時発射数1、発射間隔短め、バラつき小、直進弾ショットガン:同時発射数8、発射間隔長め、バラつき大、直進弾ミサイル:同時発射数1、発射間隔長め、バラつき無し、追尾弾というような感じです。このように上記の4つの要素を細かく変更できるようにしておけば、色々な武器を簡単に作ることができるようになるのでお勧めです。オブジェクトプールあと、Unityでシューティングゲームを作ったことがある人なら分かると思いますが、弾の発射処理は当然ながら弾をたくさん出せば出すほど重くなります。着弾したらDestroyメソッドで消去というやり方をやると重くなりがちです。そこで「オブジェクトプール」という方法を使って処理を軽くしましょう。オブジェクトプールとは、簡単に言うとInstantiateとDestroyの呼び出しを必要最小限に抑える方法です。処理内容的にはとりあえず弾がなければInstantiate着弾したら弾を非アクティブにする非アクティブな弾があるなら、次に弾を発射するときにそれをアクティブ化して再利用するという感じです。これについてはネット上に良い解説があると思うので、ぜひググってみてください。リロードモーションについてそれからリロードモーションについてですが、こちらは3Dモデルとそのアニメーションの関係なので自作するのは結構大変だと思います。アセットストアにもその辺のアセットはそんなにないし、あっても改造が難しかったりするようなのでなかなか思い通りにならないかもしれません。個人的な意見としては、作るのが大変なわりに必須というほどの機能でもないし、別にリロードは作らなくても良いのではないかと思います。次に可能なら盛り込みたい機能として、武器の切り替えやADS(=スコープを覗きこんで狙うこと)が挙げられます。武器切り替え処理についてまず武器切り替え処理については、複数の武器が登場するFPSなら必ずつけておきたい機能だと思います。これは実装はそんなに難しくなくて、武器のゲームオブジェクトが登録されたコレクションを作っておいて、マウスホイールを転がしたときに順次切り替える(=前の武器を非アクティブにして、次の武器をアクティブ化する)、といった処理でOKだと思います。ADSについて次にADS機能については、ボタンを押したら銃を正面に移動させてスコープをのぞき込むような位置に持ってくればOKです。スナイパーライフルなどスコープに倍率のある武器の場合は、自然なADSになるようにするには少し工夫が必要だとは思います。アイテム取得処理あとはFPSに限ったことではありませんが、アイテムの取得処理も実装しておきたいものです。FPSであれば主に次の2つのアイテムがあれば良いと思います。弾薬補給アイテム回復アイテムアイテムの取得処理はそれほど難しくなくて、プレイヤーに接触したかどうかの判定プレイヤーに接触したときの弾やHPの増減といった処理を書ければ十分でしょう。最後に、シングルプレイFPSを面白くするためにはAIで自動行動する敵キャラクターが欠かせません。この辺についての知識は以前の記事「【Unity】AIで自動行動する敵キャラクターの作り方」に詳しく書いたので、そちらをご覧いただければと思います。AIを作るのは初心者の方には結構難しいと思いますので、UnityでFPSを作るのであれば最低限NavmeshAgentの使い方を覚えて、「プレイヤーを追いかける敵キャラクター」を作れるようになればOKだと思います。FPS制作の流れさて、それではこの辺でFPS制作の流れを簡単に紹介しておきますね。工程としては次のような感じになります。武器切り替え・ADSの実装ゲームの裏方部分の実装アイテムや敵キャラクター作成ステージ制作テストプレイ&ビルドまずはプレイヤーキャラクターから作り始めて、弾を発射できるようにするのが先決です(1・2・3番)。この辺の作業は超地味ですが操作感に直結し、ゲームの面白さに大きく影響するのでなるべく手を抜かないようにしましょう。したら、次にゲームの裏方部分を作ってしまいます(4番)。ゲームオーバー処理やクリア処理など、いわゆる「ゲームループ」を回せるようにしておきましょう。それができたらアイテムや敵キャラクターを作ります(5番)。敵キャラクターを作るのは大変だと思うので、必要以上に種類を増やそうとしないのがポイントです。ここまでできたら後はステージを作るだけですね(6番)。こちらも大変な作業ですが、シングルプレイFPSではステージ構成(=レベルデザイン)も面白さに大きく影響するので頑張りましょう。最後にテストプレイして、バグや分かりづらい箇所がなければビルドして完成です(7番)。おわりに:FPSを作るのは楽しいぞ!以上、かなり長くなってしまいましたがFPSの作り方を詳しくまとめてみました。ここまで読んで頂ければ必要な機能や制作の流れが分かったと思うので、作り方のイメージがなんとなく見えてきたのではないでしょうか。ここからさらに進んで具体的な作り方を知りたい場合は、姉妹サイト「Unityでゲームを作ろう!」のFPSの作り方講座のほうを併せてご覧いただければ良いかと思います。私はここ半年くらい地道にFPSシステムを作りこんでいるのですが、FPSを作るのはそこまで難しくないし、何より楽しいのでもっと色々な方にFPS制作にチャレンジしてほしいと思います。みんなでマイナーな自作FPSを開拓していければ楽しそうですね。この記事を通してFPS作りに興味を持っていただければ幸いです。先日の記事ではSculptrisというソフトを使って3Dモデルを自作できるようになった、という話をしました。ここまで来たら、次の段階は自作した3Dモデルをゲームに使えるようにするのが目標となるのは言うまでもありません。それで前の記事...お知らせ3Dカーアクションゲーム「爆走!デンジャラスドライブ」を公開しました!先月からUnityで作っていた3Dカーアクションゲーム「爆走!デンジャラスドライブ」をリリースしたのでお知らせします。ゾンビの群れや障害物をぶっ飛ばしながら爆...ゲーム制作メモウディタとUnityを比較してみる私はゲーム制作ツールはいくつも使い分けるのが好きで、このところはウディタ→Unity→ウディタという感じで2つのツールを行ったり来たりしています(近々またUnityに戻るかもしれない)。2019年版2019.08.06ゲームに使えるフリーフォントまとめ2019.06.19【Unity】JSONを使ったセーブ・ロード処理2019.03.232019.06.04【Unity】AIで自動行動する敵キャラクターの作り方2020.01.022020.01.02【ウディタ】Game.exeのアイコンを変更する方法2018.06.03。