Games社が開発し、GMOグローバルサイン・ホールディングス株式会社が日本展開を行っているオンラインゲーム開発向けネットワークエンジンです。サーバーへのデプロイを前提にしたゲームを作りたい、例えば多人数対戦ゲームでセキュリティや安定性を高めたい、MMORPGのような常時稼働させたい、といった場合があるかと思います。前回の記事ではそういったゲームを作成する準備段階として、サンプルプロジェクトを動かす手順を解説しました。本記事ではサンプルプログラムを参考に、自身のプロジェクトに実装すべき機能について解説します。Fusionの基本的な解説は別記事で行っています。詳しく知りたい方は以下のリンクからご参照下さい。2サーバーに必要な機能サンプルにはサーバーモードをUGS上で動かすのに必要な機能が多く実装されています。その中でも重要な要素を紹介します。多くのスクリプトはそのままコピーするだけで機能します。parametersを取得するためのユーティリティです。DedicatedServerConfigから呼び出して使います。DedicatedServerConfigCommandLineUtilsを使って取得した文字列パラメータを、使いやすいように型変換をして保存します。ServerManagerサーバーモードの場合にサーバー向けの初期化、接続処理を行います。初期化処理でクライアントモードの場合に専用のシーンへ遷移させていますが、別クラスに分離したほうが後々管理しやすいかもしれません。Fusionで取得できるイベント(プレイヤーの接続・切断やクライアントの終了など)をログに出力します。サーバー、クライアントどちらの処理も同クラスに含まれているため、こちらも別クラスに分離したほうが分かりやすいかもしれません。GameManagerクライアントがjoin・leftした時にプレイヤーオブジェクトをスポーン・デスポーンさせる処理が書かれています。クライアントの接続数が0になった時にrunner.Shutdown();でシャットダウンを行っていますが、常時起動型を実現したい場合は不要な処理となります。ClientManagerこれはサーバーではなくクライアント側でのみ使用します。サーバーやロビーに接続する処理と、それを呼び出すUIを表示する処理です。各プロジェクトに必要な部分だけ参考にすると良いでしょう。前回の記事ではビルドを初回設定する手順を紹介しました。ここではビルドを更新していく2回目以降の手順を紹介します。サーバーを全てstopするFleetをオフラインにして(少し待ち)Deleteする新しいファイルをアップロードする新しいBuildを作成する必要はなく、既存のものを更新すれば問題ありません。いうようにビルド固有の情報をログに出力すると良いでしょう。UGSでビルドを更新せずにローカルマシンで実行する前述した手順ではUGSの処理を待つ時間があるため、試行回数を多くしたい場合には向きません。細かい調整や検証のための変更をする場合など、可能な限り早く試したい時があると思います。いった場合はLinux版をビルドするのではなく、Windows版をビルドしてサーバーモードで起動するのが良いでしょう。$$log_dir$$/Engine.log)をパラメータに追加して起動すればサーバーモードで起動します。ウィンドウは表示されませんが、タスクマネージャーから動作していることを確認できます。同様の理由で、終了させる場合もタスクマネージャー経由である必要がありやや手間がかかります。この場合はGameManagerクラスに実装されている、クライアント接続数が0になった時にシャットダウンさせる機能を使うと手間が省けます。いったエラーが出ることがあります。planesがNear<0.3やFar<0.11といった場合)に起こるようです。クライアントモードでは正常に動作している場合でも起こり得るようです。そもそもカメラはサーバーモードでは不要なため、カメラを生成しない、無効にする、探して削除する、といった対処をするとよいでしょう。さいごに前回の準備編でUGSへのデプロイ手順、今回の基礎編で最低限実装するべき機能について紹介しました。これでようやくゲームの開発を始める準備が整ったため、次回以降の記事ではゲームを実装する時に考慮すべき事柄について紹介する予定です。