This document is about: FUSION 2
SWITCH TO

Simple FPS

Level 4

概要

Simple FPSゲームは、入門レベルのゲームサンプルを提供するために設計された、シンプルなコード構造のファーストパーソンシューティングゲームです。このゲームの主な目的は、ファーストパーソンシューティングゲームの作成に興味のある初心者や開発者のための学習リソースとして機能することです。

ゲームプレイは激しいデスマッチバトルを中心に展開し、プレイヤーはリアルな倉庫環境の中でテンポの良い戦闘を繰り広げます。シンプルなデザインと明確なコード構成により、Simple FPS ゲームは、Fusion を使ったマルチプレイヤーゲーム制作の基礎を理解するための、わかりやすい出発点となっています。

このサンプルでは、Client/Serverトポロジーを使用しています。
simple fps

特徴

  • 倉庫を舞台にしたファーストパーソンシューター。
  • デスマッチモード: プレイヤーは死後しばらくするとリスポーンする。最も多くキルしたプレイヤーが勝利。
  • 3種類のヒットスキャン武器: ピストル、オートマチックライフル、ショットガン。
  • マップの至る所で武器とヘルスを拾うことができる。
  • ダブルダメージブースト:マッチの最終局面で30秒間持続。
  • 初心者に優しいコード構成で、理解しやすく、改造しやすい。
  • シンプルなキネマティック・キャラクター・コントローラー (Simple KCC) によるプレイヤーの移動。
  • Photonメニューの統合。

ダウンロード

バージョン リリース日 ダウンロード
2.0.6 Feb 02, 2024 Fusion Simple FPS 2.0.6 Build 414

動作環境

  • Unity 2022.3
  • Fusion AppId: サンプルを実行するには、まずPhotonEngine DashboardでFusion AppIdを作成し、Real Time SettingsのApp Id Fusionフィールドに貼り付けます。ゲームを始めるセクションの指示に従ってください。

ゲームを始める

SimpleFPSゲームは、メニューのスタートアップシーン(Scenes/Startup)から始めることもできます。ここでは様々なオプションがあり、新しいデスマッチゲームを始められます。または、直接ゲームプレイシーン(Scenes/Deathmatch)をローンチしてアクションへ飛び込むこともできます。

コントロール

  • 移動には WSAD、ジャンプには SPACE、射撃には マウスの左ボタン を使用する。
  • 123で収集した武器を切り替え、Rで武器をリロードする。
  • Fを押すと、近くの表面にイメージを吹き付けることができ、さらに楽しい要素が加わる。
  • カーソルをUnityエディタ内でロックしたりリリースしたりするには ENTER キーを使用。

システム

プレイヤー

メインの Player スクリプトは移動や武器のコントロールのための入力処理のような重要な機能を処理します。また、正しいプレイヤーのビジュアル表現の可視性を決定し、ローカルプレイヤーの一人称ビジュアル(武器を持った手だけ)と、ローカルプレイヤーが見ている他のプレイヤーの三人称ビジュアル(全身キャラクター)を切り替えます。三人称視点でのアニメーションもこのスクリプトで制御されます。

プレイヤーの入力はPlayerInputクラスによって処理され、デバイス(キーボード/マウス)からの入力を蓄積します。蓄積された入力は、Fusion標準の OnInput コールバックで処理されます。

プレイヤーの体力は Health スクリプトに保存されます。ゲームプレイ中、プレイヤーはスポーン後、少しの間不死状態になります。プレイヤーが武器を撃つと不死状態は即座に停止されます。

Simple FPSの足音は全てのプレイヤーに聞こえ、ローカルプレイヤーには自分の足音が少し小さく聞こえます。

SimpleKCC(シンプル・キネマティック・キャラクター・コントローラー)コンポーネントはプレイヤーの移動と衝突を解決します。詳しくはSimple KCCを参照してください。

BodyHitboxは、Fusionの標準的なHitboxコンポーネントの子コンポーネントで、体の部位によって異なるダメージ修正を持つヒットボックスを実装するために使用します。例えば、頭には2倍のダメージが与えられ、足には軽減されたダメージが与えられます。プレイヤーのヒットボックスの位置は、簡単のためにアニメーションの影響を受けず、最も一般的なプレイヤーのポーズである、武器を持った静的なポーズに設定されています。

gizmos showcasing hit boxes

Fusionのアニメーションについて詳しくは、FusionマニュアルのAnimationページと、Animationsテクニカルサンプルを参照してください。なお、これらのサンプルはFusion V1で作成されています。

武器

Weaponsスクリプトは、ゲーム内の武器の一般的な機能を扱い、全てのプレイヤー武器の参照を保持し、発射やリロードなどのアクションを可能にします。すべての武器はすでにプレイヤーのプレハブ階層に含まれており、ゲーム内に数種類の武器しか存在しない場合、これは簡単なアプローチです。

Simple FPSサンプルにはヒットスキャン武器が組み込まれており、指定した最大距離でレイキャストを発射し、即座に命中判定を行うことができます。発射された弾は物理的に時間をかけて移動するわけではありませんが、このサンプルではダミーの発射ビジュアル(ProjectileVisualスクリプトによって処理されます)を採用しており、高速の黄色い弾丸が軌跡を描きながら移動しているように錯覚させます。この軌跡はレイキャストの方向と終点を正確に表しています。

assault rifle shooting

発射された弾ごとに、小さなデータ構造 ProjectileDataWeapon スクリプト内の配列に格納されます。この配列はネットワーク化されており、循環データバッファとして機能します。つまり、配列の末尾に到達すると、発射体は再び先頭から格納されるのです。この配列を使用することで、すべてのクライアントで発射物を発射することができ、効率的な発射物のネットワーキングを行うことができます。

C#

private struct ProjectileData : INetworkStruct
{
    public Vector3     HitPosition;
    public Vector3     HitNormal;
    public NetworkBool ShowHitEffect;
}

プロジェクタイルやネットワーキングについてより深く知りたい場合は、Projectile Essentialsサンプル と Projectile Advanced サンプルで包括的な説明がされていますのでご参照ください。これらのサンプルはFusion V1で作成されています。

ピックアップ

サンプルには2種類のピックアップがあります。どちらのピックアップも、プレイヤーがその上を歩くと自動的に回収されます。HealthPickupは指定した量だけプレイヤーの体力を回復します。WeaponPickupはプレイヤーに新しい武器を与えるか、すでにその武器を手に入れている場合は弾薬を補充します。

health pickup

ゲームプレイ

Gameplayスクリプトはゲームの中心となるスクリプトで、Simple FPS のゲームプレイ体験の様々な側面を処理します。このスクリプトはプレイヤーのスポーン、プレイヤーのスコア計算、異なるゲームプレイ状態間の遷移を管理します。

Simple FPS のゲームプレイモードは古典的なデスマッチで、プレイヤーはお互いを排除するために戦闘を行います。排除されたプレイヤーは、死後一定時間が経過するとリスポーンします。時間切れで試合は終了し、キル数の多いプレイヤーが勝者となります。

ゲームプレイシステムはSkirmishRunningFinishedといったいくつかの状態で動作します。Skirmishの状態では、ソロプレイヤーは時間に縛られることなく自由にアリーナを探索することができます。2人目のプレイヤーがゲームに接続すると、ゲームプレイは Running 状態に切り替わり、マッチタイマーが開始されます。最後にFinished状態になると試合が終了し、結果が表示されます。

接続されたプレイヤーは Gameplay スクリプトによってプレイヤーデータ辞書(すべてのプレイヤーに複製される)を使用して管理されます。この辞書内では、各プレイヤーはそのプレイヤーに関する重要な情報を保持する PlayerData データ構造に関連付けられています。PlayerDataには、プレイヤーのニックネーム、キル数や死亡数、現在のステータス(生きているかどうか)などの詳細が含まれています。

C#

public struct PlayerData : INetworkStruct
{
    [Networked, Capacity(24)]
    public string    Nickname { get => default; set {} }
    public PlayerRef PlayerRef;
    public int       Kills;
    public int       Deaths;
    public int       LastKillTick;
    public int       StatisticPosition;
    public bool      IsAlive;
    public bool      IsConnected;
}

The PlayerDataデータ構造は、ゲームプレイを通してプレーヤーとその統計情報を効率的に追跡することができます。

UI

Simple FPSのユーザーインターフェースは、特定のUIフレームワークに依存することなく、単純な方法で処理されます。UI管理を担当するメインスクリプトは GameUI スクリプトです。ゲームプレイ中に表示されるべき適切なUIゲームオブジェクトを有効にします。さらに、GameUIスクリプトは他のUI要素への参照を保持し、プレイヤーがスポーンしたときにプレイヤーUIを更新します。

scoreboard ui

一般的なUI操作に加え、このゲームでは、プレイヤーに重要なフィードバックを提供するゲームプレイのアナウンスがあります。これらのアナウンスは "Lead Lost "や "Lead Taken "などのように、ゲームプレイ情報パネルを担当するUIGameplayInfoスクリプトによって管理されます。このスクリプトは、プレイヤーの統計の変化に基づいて特定のアナウンスゲームオブジェクトを有効にし、適切なタイミングでプレイヤーに関連するメッセージが表示されるようにします。

Simple FPSのUI実装はシンプルさと機能性に重点を置いており、複雑なUIフレームワークを必要とせず、プレイヤーが必要な情報を受け取れるようにしています。

メニュー

Simple FPSでは、標準的なPhotonメニューが組み込まれており、プレイヤーは素早く接続し、試合を開始することができます。

photon menu

サードパーティアセット

Simple FPS サンプルのコアはFusionによって実現されていますが、ゲームに必要なのは技術「だけ」ではありません!Photon が提供するマルチプレイヤー技術に加え、Simple FPS は優れたクリエイター達のサポートによって実現されています。

モデル、エフェクト、サウンドのようなサードパーティのアセットは `Assets/3rdParty` フォルダにあります。自分のプロジェクトでこれらを使用するには、それらからライセンスを購入してください。
Back to top