UnityでFPSゲームを作ってみました その1

今回はUnityでFPSゲームを作成してみました。完成したゲームはこちらです。https://ma510884.com/FPS_Game

参考にした記事、使用したアセットは以下になります。

まずはCartoon Low Poly CityのScenesを開き、CartoonLowPolyCityLite_01を開きます。 そして、名前をGameSceneとして保存します。

次に、記事にならってFirst Person All-in-Oneをインポートし、各数値を設定します。Mouse Seisitivityは5以下が良いようです。実際に操作してみて調整してください。 Auto Crosshairはあくまで画面の中心を表示するだけですので、着弾点が表示されるわけではありません。紛らわしいので記事の通りに非表示にしてしまいましょう。

設定が済んだらUnityを実行してみましょう。何も問題がなければ道路の上を歩けると思います。

続いては銃を用意します。M4A1_PBRのモデルをFirstPerson-AIOの中のPlayer Cameraにドラッグ&ドロップし、子要素にします。その後、記事のように各数値を設定します。

こちらもUnityを実行してみてきちんと動くか確認してみましょう。

次はマズルフラッシュ(発砲時の炎)と着弾のエフェクトを追加します。GunControllerを作成して銃口の位置にセットし、記事の通りにスクリプトを作成してアタッチします。また、War FXからエフェクトのPrefabを設定します。

ここでUnityを実行すると記事のようにきちんと着弾しないと思います。実はこの記事には記述漏れがありまして、GunControllerをY方向で180度回転させる必要があります。そうすることで記事のようにきちんと着弾すると思います。Unityを実行してみて確認してください。

続いてはUIまわりを作成していきます。左下に弾薬ゲージの背景とその子要素に弾薬ゲージ、残弾数のテキスト、供給ゲージの背景とその子要素に供給ゲージを作成します。右上には得点を表示する部分を作成します。位置はGame画面を拡大表示して確認しながら微調整してください。

こちらもスクリプトを追記後GunControllerのinspectorにゲージなどを設定し、Unityを実行して動作を確認してください。

次はゲームを制御する部分を作成していきます。基本的には記事のままですが、後ほどスタートボタンを付ける関係でゲーム開始時のカメラは固定に、スコアの桁数は6桁に書き換えました。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class GameManager : MonoBehaviour
{

  [SerializeField]
  int maxScore = 999999;
  [SerializeField]
  Text scoreText;
  [SerializeField]
  FirstPersonAIO firstPerson;
  [SerializeField]
  FirstPersonGunController gunCOntroller;
  [SerializeField]
  Text centerText;
  [SerializeField]
  float waitTime = 2;

  [System.NonSerialized]
  public bool gameOver = false;

  int score = 0;

  public int Score
  {
    set
    {
      score = Mathf.Clamp(value, 0, maxScore);

      scoreText.text = score.ToString("D6");
    }
    get
    {
      return score;
    }
  }

    void Start()
    {
    InitGame();
    StartCoroutine(GameStart());
    }

  void InitGame()
  {
    Score = 0;
    firstPerson.playerCanMove = false;
    firstPerson.enableCameraMovement = false;
    gunCOntroller.shootEnabled = false;
  }

  public IEnumerator GameStart()
  {
    yield return new WaitForSeconds(waitTime);
    centerText.enabled = true;
    centerText.text = "3";
    yield return new WaitForSeconds(1);
    centerText.text = "2";
    yield return new WaitForSeconds(1);
    centerText.text = "1";
    yield return new WaitForSeconds(1);
    centerText.text = "GO!!";
    yield return new WaitForSeconds(1);
    firstPerson.playerCanMove = true;
    firstPerson.enableCameraMovement = true;
    gunCOntroller.shootEnabled = true;
    // centerText.text = "";
    centerText.enabled = false;
  }

  public IEnumerator GameOver()
  {
    gameOver = true;
    firstPerson.playerCanMove = false;
    firstPerson.enableCameraMovement = false;
    gunController.shootEnabled = false;
    centerText.enabled = true;
    centerText.text = "Game Over";
    yield return new WaitForSeconds(1);
    DestroyEnemies();
    // centerText.text = "";
    // centerText.enabled = false;
    gameOver = false;
  }

  void DestroyEnemies()
  {
    GameObject[] enemies = GameObject.FindGameObjectsWithTag("Enemy");

    foreach(GameObject enemy in enemies)
    {
      Destroy(enemy);
    }
  }

}

Unityを実行して、「3、2、1、Go!!」と表示されたあと動けるようになれば成功です。

次は敵キャラクターを作成していきます。

その2に続きます

  • 8
  • 0
  • 1

おすすめのタグ

Laffey(ラフェィ)

色々な物・もの・モノを作って記事にしています

作者のページを見る

関連記事

寄付について

「novalue」は、‟一人ひとりが自分らしく働ける社会”の実現を目指す、
就労継続支援B型事業所manabyCREATORSが運営するWebメディアです。

当メディアの運営は、活動に賛同してくださる寄付者様の協賛によって成り立っており、
広告記事の掲載先をお探しの企業様や寄付者様を随時、募集しております。

寄付についてのご案内