【Unity】シングルプレイFPSの作り方~必要な機能・制作の流れを紹介!

FPSの作り方まとめ ゲーム制作メモ

今回は「Unityを使ったシングルプレイFPSの作り方」をテーマに、

  • 求められる機能
  • 制作の流れ

を整理してみるまとめ記事です。

FPSというと海外では非常に人気のあるジャンルですが、日本ではまだまだ「ゲーマーがやるゲーム」という感じでマイナーです。そして国産のFPSというと数えるほどしかありませんし、自作FPSにいたっては滅多に見かけることがありません

ただ、姉妹サイト「Unityでゲームを作ろう!」のFPSの作り方講座のアクセスを見てみると意外と閲覧されているので、「FPSを作りたい」と思っている人は一定以上いることがわかります。つまり「作ってみたいけど作り方がよくわからん」という方が多いのではないでしょうか?

そこでここでは前述の通り、UnityでのFPS制作で作る必要がある機能や制作の流れなどを紹介していきます。


※Unityの機能説明も含めた「具体的な作り方の手順」を知りたい方は、↑の姉妹サイトのほうをご覧ください。
※熱中して書いたのでかなりの長文です。

スポンサーリンク

そもそもFPSってなに?

まずはじめに、そもそもFPSって何?という部分を簡単に説明しておきます。FPSとは「First Person Shooter」の略で、日本語で言うと「一人称視点シューティング」です。

どんなゲームなのかについては文章で説明しても分かりづらいので、下のゲーム画面の例をご覧ください。

FPSの例

FPSのゲーム画面の例(※私が以前制作していたゲーム)

まあ非常にザックリ言うと

  • 自分の目線で見たようなゲーム画面で
  • 銃を使って敵を倒す

という要素を持った3Dゲームを指すゲームジャンルですね。自分視点なので、プレイヤーキャラは銃と腕くらいしか表示されないのが特徴です。

FPSの制作難易度について

では、ここからFPSを作るというテーマに切り込んでいきましょう。はじめに「FPSは簡単に作れるのか?」という疑問にお答えしておくと、個人的な意見としては

シングルプレイFPSなら比較的簡単に作れる

と思っています。

シングルプレイFPSなら簡単に作れる!その理由は?

このように言える理由としては次の3つが挙げられます。

  1. アクションゲームに近いから。
    →Unityでアクションゲームを作るのは簡単。
  2. 海外では人気ジャンルなので、アセットが充実しているから。
    →一から自作しなくても良い
  3. シングルプレイであればネットゲーム制作の知識が必要ないから。
    →ネットゲームを個人制作するのはかなり難しい。

まず一つ目の理由は、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に求められる機能を整理しておきます。主な機能を挙げると次の通りです。

  1. 一人称視点のプレイヤーキャラクター
  2. 弾の発射・リロード
  3. 武器切り替え・ADS等
  4. アイテム取得処理
  5. AIで自動行動する敵キャラクター

一人称視点のプレイヤーキャラクター

まず、FPSというからには一人称視点のプレイヤーキャラクターを作る必要があります。この一人称視点のプレイヤーキャラには、一般的には

  • マウス移動=視点移動
  • WASD、もしくは方向キー=前後左右に移動

というような動きをさせることが多いです。まあこの辺は文章で書いてもよく分からないと思うので、ピンとこない方は実際にFPSをやってみるのをお勧めします。

あと動きのイメージが分かっていてもスクリプトの書き方が分からない場合は、UnityであればStandard Assetsの中にサンプルがあるので、初めての方はそのC#スクリプトを見てみると良い勉強になるのではないかと思います。もし自作できそうになければ最悪それをそのまま使っても良いですし、アセットストアにはもう少し高度なキャラクターコントローラーもあるので、そちらを使ってみるのも一つの手かもしれません。

弾の発射・リロード

次にFPSであれば武器から弾を発射したり、リロードモーションをつけたりしたいものです。そこでその辺について少し詳しくお話しておきましょう。

弾の発射処理について

弾の発射処理の2つの方式

まず、弾の発射処理についてはやり方が2通りがあります。

  1. 物理演算で弾を飛ばす
  2. レイを飛ばして、レイが当たった地点を着弾地点とする

どちらが良いのかはゲーム内容によりけりですが、よく分からなければとりあえず

  • リアルさを追求したいなら物理演算
  • 処理を軽くしたいならレイ

という風に考えてもらえばOKかなと思います。

弾の同時発射数やバラつき等の実装

それから弾の発射については、次の機能(※私は「シューティング4要素」と呼んでいます)を実装しておくと武器のバリエーションを作りやすくなります。

  1. 弾の同時発射数
  2. 弾の発射間隔
  3. 弾のバラつき具合
  4. 発射する弾の種類の指定

具体的な例を挙げると、

  • アサルトライフル:同時発射数1、発射間隔短め、バラつき小、直進弾
  • ショットガン:同時発射数8、発射間隔長め、バラつき大、直進弾
  • ミサイル:同時発射数1、発射間隔長め、バラつき無し、追尾弾

というような感じです。このように上記の4つの要素を細かく変更できるようにしておけば、色々な武器を簡単に作ることができるようになるのでお勧めです。

オブジェクトプール

あと、Unityでシューティングゲームを作ったことがある人なら分かると思いますが、弾の発射処理は当然ながら弾をたくさん出せば出すほど重くなります。特に

  1. Instantiateメソッドで弾をインスタンス化
  2. 着弾したらDestroyメソッドで消去

というやり方をやると重くなりがちです。そこで「オブジェクトプール」という方法を使って処理を軽くしましょう。

オブジェクトプールとは、簡単に言うとInstantiateとDestroyの呼び出しを必要最小限に抑える方法です。つまり処理内容的には

  1. とりあえず弾がなければInstantiate
  2. 着弾したら弾を非アクティブにする
  3. 非アクティブな弾があるなら、次に弾を発射するときにそれをアクティブ化して再利用する

という感じです。これについてはネット上に良い解説があると思うので、ぜひググってみてください。

リロードモーションについて

それからリロードモーションについてですが、こちらは3Dモデルとそのアニメーションの関係なので自作するのは結構大変だと思います。そしてアセットストアにもその辺のアセットはそんなにないし、あっても改造が難しかったりするようなのでなかなか思い通りにならないかもしれません。

なので個人的な意見としては、作るのが大変なわりに必須というほどの機能でもないし、別にリロードは作らなくても良いのではないかと思います。

武器切り替え・ADS等

次に可能なら盛り込みたい機能として、武器の切り替えやADS(=スコープを覗きこんで狙うこと)が挙げられます。

武器切り替え処理について

まず武器切り替え処理については、複数の武器が登場するFPSなら必ずつけておきたい機能だと思います。これは実装はそんなに難しくなくて、武器のゲームオブジェクトが登録されたコレクションを作っておいて、マウスホイールを転がしたときに順次切り替える(=前の武器を非アクティブにして、次の武器をアクティブ化する)、といった処理でOKだと思います。

ADSについて

次にADS機能については、ボタンを押したら銃を正面に移動させてスコープをのぞき込むような位置に持ってくればOKです。ただしスナイパーライフルなどスコープに倍率のある武器の場合は、自然なADSになるようにするには少し工夫が必要だとは思います。

アイテム取得処理

あとはFPSに限ったことではありませんが、アイテムの取得処理も実装しておきたいものです。FPSであれば主に次の2つのアイテムがあれば良いと思います。

  1. 弾薬補給アイテム
  2. 回復アイテム

アイテムの取得処理はそれほど難しくなくて、

  • プレイヤーに接触したかどうかの判定
  • プレイヤーに接触したときの弾やHPの増減

といった処理を書ければ十分でしょう。

AIで自動行動する敵キャラクター

最後に、シングルプレイFPSを面白くするためにはAIで自動行動する敵キャラクターが欠かせません。

この辺についての知識は以前の記事「【Unity】AIで自動行動する敵キャラクターの作り方」に詳しく書いたので、そちらをご覧いただければと思います。

ただまあ、AIを作るのは初心者の方には結構難しいと思いますので、UnityでFPSを作るのであれば最低限NavmeshAgentの使い方を覚えて、「プレイヤーを追いかける敵キャラクター」を作れるようになればOKだと思います。

FPS制作の流れ

さて、それではこの辺でFPS制作の流れを簡単に紹介しておきますね。工程としては次のような感じになります。

  1. 一人称視点のプレイヤーキャラクター作成
  2. 弾の発射処理の作成
  3. 武器切り替え・ADSの実装
  4. ゲームの裏方部分の実装
  5. アイテムや敵キャラクター作成
  6. ステージ制作
  7. テストプレイ&ビルド

まずはプレイヤーキャラクターから作り始めて、弾を発射できるようにするのが先決です(1・2・3番)。この辺の作業は超地味ですが操作感に直結し、ゲームの面白さに大きく影響するのでなるべく手を抜かないようにしましょう。

そうしたら、次にゲームの裏方部分を作ってしまいます(4番)。ゲームオーバー処理やクリア処理など、いわゆる「ゲームループ」を回せるようにしておきましょう。

それができたらアイテムや敵キャラクターを作ります(5番)。敵キャラクターを作るのは大変だと思うので、必要以上に種類を増やそうとしないのがポイントです。

ここまでできたら後はステージを作るだけですね(6番)。こちらも大変な作業ですが、シングルプレイFPSではステージ構成(=レベルデザイン)も面白さに大きく影響するので頑張りましょう。

最後にテストプレイして、バグや分かりづらい箇所がなければビルドして完成です(7番)。

おわりに:FPSを作るのは楽しいぞ!

以上、かなり長くなってしまいましたがFPSの作り方を詳しくまとめてみました。ここまで読んで頂ければ必要な機能や制作の流れが分かったと思うので、作り方のイメージがなんとなく見えてきたのではないでしょうか。ここからさらに進んで具体的な作り方を知りたい場合は、姉妹サイト「Unityでゲームを作ろう!」のFPSの作り方講座のほうを併せてご覧いただければ良いかと思います。

私はここ半年くらい地道にFPSシステムを作りこんでいるのですが、FPSを作るのはそこまで難しくないし、何より楽しいのでもっと色々な方にFPS制作にチャレンジしてほしいと思います。みんなでマイナーな自作FPSを開拓していければ楽しそうですね。この記事を通してFPS作りに興味を持っていただければ幸いです。