はじめに
Photon FusionはドイツのExit Games社が開発し、GMOグローバルサイン・ホールディングス株式会社が日本展開を行っているオンラインゲーム開発向けネットワークエンジンです。
過去の記事では基本的な使い方を中心に紹介してきましたが、殆どがサーバーへのデプロイを必要としないモードの解説でした。
しかし、サーバーへのデプロイを前提にしたゲームを作りたい、例えば多人数対戦ゲームでセキュリティや安定性を高めたい、MMORPGのように常時稼働させたい、といった場合があるかと思います。
前者の場合はBR200、それ以外の場合はFusion Dedicated Serverサンプルが参考になります。
Fusion Dedicated Serverサンプルの解説ページには、ビルドして実行する(自PCでサーバー側プログラムを動かす)までと、実装についての解説があります。
しかしその先のサーバーへデプロイする部分については個々人の状況による部分が多く、具体例がありません。
そこで本記事ではサンプルプログラムをUGSへデプロイして動かす手順についてまとめました。
前提記事
Photon Fusionの基本的な解説は別記事で行っています。詳しく知りたい方は以下のリンクからご参照下さい。
Photon Fusion for Unityの導入手順とPUN2との機能比較
関連記事
https://qiita.com/tags/photonfusion
動作確認環境
Windows 10 Home 21H2
Unity 2020.3.38f1
Fusion Dedicated Server 1.1.2 Build 2
UGSのGSHとは
UGSとはUnity Gaming Serviceの略で、Unityが提供する様々なオンラインサービスの総称です。
今回はUGSのうち、Game Server Hosting(その前提のCloud Content Delivery)をサーバープログラムを設置するために利用します。
サービスは従量課金制ですが、無料枠が多く試しに動かしてみる程度なら無料枠を超えることはないと思われます。
ただし無料枠を超えないにしても、有料サービスを有効化するためクレジットカードが必要になります。
手順
Unityでの作業
初期設定
まずはFusion Dedicated Serverサンプルの解説ページからサンプルプロジェクトをダウンロードし、Unity Editorで開きます。
PhotonのダッシュボードでAppIDを作成して適用、UnityEditorの Edit>Project Setting>Services>Create ProjectID でUnity ProjectIDを作成しリンクしておきます。
サーバープログラムのビルド
準備として、Unity HubからLinux Build Support IL2CPPモジュールを追加し、Project Setting>Player>Configurasion>Scripting Backend を IL2CPP に変更しておく必要があります。
その後Target PlatformをLinuxに変更しビルドします。
クライアントのビルド
Unity Editor以外も使って多数の接続テストをする場合はクライアントもビルドします。
Target Platformはwindowsのままビルドすれば問題ありませんが、サーバー版のファイルと混ざらないようフォルダは分けておいたほうがよいでしょう。
UGSでの作業
UGSとGame Server Hostingの有効化
まずリンク先の「今すぐ仕様を開始する」から進みUGSを有効化する必要があります。
Game Server Hostingの設定
コンソールのMultiplayerを開くとSetup guideが開くため、それに従い進めます。
参考
Integrate game server
途中SDKを入れるよう指示がありますが、サンプルプログラムに組み込まれているため飛ばします。
Create a build
Uploadするファイルは、ビルドしたサーバープログラムフォルダのうち以下のファイルです。
- *.so ファイル
- *.x86_64 ファイル
- *_Data フォルダー
Create a Build configuration
Game server executable は .x86_64 ファイルを選択します。
launch parameters は -batchmode -nographics -logFile $$log_dir$$/Engine.log
に書き換えます。
Configuration variables、Usage settingsはデフォルトで問題ありません。
Create a fleet
Regionはasia、serversはminを1、maxを2にします。
Create a test allocation
設定が問題ないかをテストします。
テスト後Test Allocationsは不要なので、Deallocateで削除して問題ありません。
動作確認
ここまで完了したら、あとは任意のServer instanceを立ち上げ、クライアントプログラムを起動します。
その他
UnityGamingServicesでの接続数表示について
現在の状態ではUGS上で接続数がカウントされません。
カウントをするには、Build configurationのQuery TypeをSQP(Server Query Protocol)に変更し、プログラム側で初期化等をする必要があります。詳しくは今後の記事で解説する予定です。
さいごに
自分はサーバーを使って常時接続可能なオンラインゲームの制作は初めてで、サーバーサイドの知識もほぼない状態でした。しかしそれでも動かすところまでは非常に手早く進むことができました。
ただし、今後ゲームロジックを実装していくにあたって、考慮すべき部分については確認できていないため、今後別の記事でまとめていく予定です。