DGS のローカル開発手順 (Windows)

はじめに

CSAR を使うとローカル環境上で簡単に DGS の開発を行うことができます。

Diarkis サーバークラスターは Windows 上で動かすこともできるので、別途サーバー環境を用意せずにローカル環境のみで DGS を動かす事が可能です。

本ページでは Windows 上のローカル環境で開発フローを回すために以下について解説します。

  • CSAR の開発フローの確認

  • Diarkis サーバーのビルド、実行方法

  • Unity での DGS サーバーのビルド方法

動作環境

2025-07-07 現在のバージョン v1.1.0 について、以下の環境で動作を確認しております。

  • Windows 11

  • Go 1.24

CSAR DGS のローカル上での動作イメージ

ローカル環境においては、開発効率を重視するために、Diarkis クラスターで管理されている DGS プロセスを allocate するように構築します。それにより、開発者が任意のタイミングで DGS をビルドして動作確認することができます。

以下はローカル環境での開発フローの例です。

Diarkis はローカル環境では各プロセスを実行するだけで、Diarkis クラスターとして管理されます。CSAR は DGS の実装・修正をしてビルドおよび実行(Editor においては Play)するだけでクラスターに参加でき、動作確認ができます。

mars, HTTP, UDP サーバーのビルド、起動手順

Diarkis Server Template のインストール

以下リポジトリより、Diarkis Server Template のソースコードを取得します。

https://github.com/Diarkis/diarkis-server-template

git clone して利用中のバージョンをチェックアウト、または releases

プロジェクトの生成

PowerShell から以下のコマンドを実行して、プロジェクトを生成します。

# parameters: {project_id} {builder_token} {output\}
> .\run-mage.bat examples:install 12345678901 11111111-1111-1111-1111-111111111111 ../server_bin
  • project_id: 弊社が発行したプロジェクトID

  • builder_token: 弊社が発行したBuilder Token

  • output: 生成したプロジェクトの出力先。ここでは ../server_bin として説明します

上記のコマンドを実行することで、 ../server_bin に Diarkis のサンプルプロジェクトが出力されます。

ビルド

出力されたサンプルプロジェクトの ../server_bin/csar/dgs が DGS のサンプルプロジェクトとなります。ディレクトリを移動し、以下のコマンドを実行して、Diarkis のサーバーバイナリをビルドします。

> cd ..\server_bin\csar\dgs
> .\run-mage.bat build:local

ビルドが終了すると、 remote_bin ディレクトリにバイナリが出力されます。

実行

mars, http, udp をそれぞれ起動します。それぞれ別の PowerShell のウィンドウで起動します。

> .\run-mage.bat server mars
> .\run-mage.bat server http
> .\run-mage.bat server udp

必要に応じて、Go のテストクライアントで動作確認を実施してください。

👉 2. テストクライアントで疎通確認する

DGS サーバーのビルド、起動手順

Unity で DGS サーバーを実行する

  1. Diarkis Plugin Sample/Sample/Scenes から DiarkisSampleScene を選択してください。

  2. DiarkisSampleScene の DiarkisNetworkManager から、Pre Stored Http Host に Diarkis サーバーの アドレス:ポート を指定してください。

  3. DiarkisSampleScene の SceneManager から、Editor DGS Clound Env に DGS サーバーを起動する PC の アドレス (ポート番号は不要) を指定してください。

    1. Diarkis サーバーと DGS サーバー を同じ PC で起動する場合は、同じ アドレスを指定してください。

    2. DGS サーバーを複数起動される場合は、Editor DGS Port7400 以外をご利用ください。

  4. BuildSettingsScenes In Build で、DGSSSampleScene と DiarkisSample_HostClientGameDemo_2_InGame を選択します。

※以下の参考画像では、 Diarkis サーバーを ローカルホスト (127.0.0.1)で起動している場合の設定になります。

DSGサーバー プロセス実行

  1. Unity Editor で DGSSampleScene を起動して、Play ボタンで実行します。

  2. 実行すると、DGS サーバーのプロセス (relay.exe) が起動され、コンソールウィンドウが起動されます。

  3. relay.exe は、UnityEditor で DGSサーバーを起動した時のみ、起動されるプロセスになります。

DGS サーバープロセスを起動する

DGS サーバーのプロセスのビルド手順

  1. Diarkis Plugin Sample/Sample/Scenes から DiarkisSampleScene を選択してください。

  2. DiarkisSampleScene の DiarkisNetworkManager から、Pre Stored Http Host に Diarkis Http サーバーの アドレス:ポート を指定してください。

  3. DiarkisSampleScene の SceneManager から、Editor DGS Clound Env に DGS サーバーを起動する PC の アドレス (ポート番号は不要) を指定してください。Diarkis サーバーと DGS サーバー を同じ PC で起動する場合は、同じ アドレスを指定してください。

  4. BuildSettingsScenes In Build で、DGSSSampleScene と DiarkisSample_HostClientGameDemo_2_InGame を選択します。

  5. Platform リストから Dedicated Server を 選択して、Switch Platform ボタンを押下します。

  6. Build ボタンを押下して、Dedicated Server の ヘッドレスの Standalone バイナリーをビルドします。

※以下の参考画像では、 Diarkis サーバーを ローカルホスト (127.0.0.1)で起動している場合の設定になります。

DGS サーバープロセスの実行手順

以下のように、引数を指定して起動してください。

{app} {logFile} {meshFile} {DGS Endpoint} {DGS Port} {DGS Cloud Env}


> .\UnityDiarkis_Sample.exe .\log.json .\mesh.json 0.0.0.0 7400 127.0.0.1
  • logFile : log の config ファイルの log.json パスを指定します。

  • meshFile : mesh サーバーの config ファイルの mesh.json パスを指定します。

  • DGS Endpoint : DGS サーバーの IP を指定します。

  • DGS port : DGS サーバーの Port を指定します。 DGS サーバーを複数起動する場合は、7401, 7402 など 7400 番台以降を指定します。複数起動する際に、同じ Port 番号を指定すると正しく動作しないため予めご留意ください。

  • DGS Cloud Env : 起動する DGS サーバーの ローカルアドレスを指定してください。

mesh.json の例

{
 "marsAddress": "127.0.0.1",
 "marsPort": "6779"
}
  • address, marsAddress には、Diarkis サーバーの ローカルIP を指定します。

log.json の例

{

  "level": "sys",
   "levels": {
    "ROOM": "verbose",
    "_FIELD": "verbose",
    "_UDP": "network"
  },
  "timeZone": "local",
  "color": true,
  "flat": false,
  "filePath": "./diarkis.test.log",
  "unsafeLogging": true
}
  • DSGサーバー プロセス実行時の Diarkis サーバー側のログを設定するためのファイルになります。

実行すると以下のようなコンソールが起動します。DGS サーバープロセスのログをご確認頂けます。

DGS サーバープロセスを終了する時は、コンソールで Ctrl + c で終了し、コンソールウィンドウを閉じてください。

DGS クライアントプロセスを起動する

DGS クライアントプロセスのビルド手順

  1. Diarkis Plugin Sample/Sample/Scenes から DiarkisSample_HostClientGameDemo_1_Menu を選択してください。

  2. DiarkisSampleScene の DiarkisNetworkManager から、Pre Stored Http Host に Diarkis Http サーバーの アドレス:ポート を指定してください

  3. BuildSettingsScenes In Build で、DiarkisSample_HostClientGameDemo_1_Menu と DiarkisSample_HostClientGameDemo_2_InGame を選択します。

  4. Platform リストから Windows を 選択して、Windows が有効になっていなかったらSwitch Platform ボタンを押下します。

  5. Build ボタンを押下して、Windows の Standalone バイナリーをビルドします。

※以下の参考画像では、 Diarkis サーバーを ローカルホスト (127.0.0.1)で起動している場合の設定になります。

DGS クライアントプロセスの実行手順

  1. ビルドした DGS クライアントプロセスを 2つ 起動します。

    1. MinMembers : 2

    2. MaxMembers : 4

    3. Connection Mode: SingleAuthority

    4. Network Type: DGS

  2. パラメータの意味

    1. MinMembers は、設定した人数が集まったら DGS サーバーに接続

    2. MaxMembers は、Room に入れる最大数

  1. Create / Join Game Instance ボタンを押下して、DGSサーバーと接続が成功すると、以下のような画面になります。

HostClientGameApp.cs の StartGameInstanceProcessCoroutine()

DiarkisSample_HostClientGameDemo のサンプルを DGS モードで動かした場合、

  1. クライアントA が、 MaxMembers=4 を指定して StartGameInstance を呼び出します。

  2. MaxMembers 分 他のクライアントB,C,D が、StartGameInstance が呼び出した後に、

  3. クライアントA,B,C,D の IsGameInstanceStarted() = true になります。

現状 HostClientGameApp.cs のコードで、各クライアント が StartGameInstance を呼び出してから 20秒間に MaxMembers 分 他のクライアントが StartGameInstance を呼ばないとタイムアウトになってしまいますのでご注意ください。タイムアウトになったクライアントは DGS サーバーとの接続に失敗します。必要に応じて こちらのタイムアウト時間を変更してください。


  // ConnectionManager を作成しゲームインスタンスの開始リクエストを送信します。
  // Authoritative Network の機能は ConnectionManager を使用してアクセスするため、ここ以降 DiarkisInterface の機能は基本的には使用しません。
  var connection = DiarkisNetworkManager.GetConnectionManager(gameModeName_);
  if (!connection.IsGameInstanceStarted())
  {
     uid_ = DiarkisNetworkManager.GetDiarkisInterface(gameModeName_).UID;
     connection.StartGameInstance(gameConfig_);
     // クライアント間の直接通信(メッシュ接続)を許可します
     // この設定を有効にすることで Host-Client 型の API だけでなく SendUnicast/Multicast/Broadcast を使用する事が出来るようになります。
     DiarkisAsyncResult res = new DiarkisAsyncResult();

     // タイムアウトを20秒で設定。DGS モードの時は 20秒以内に 他のクライアントも GameInstanceStart する必要があるので注意してください。
     // 必要に応じて調整する必要があります。
     yield return DiarkisAsync.WaitFor(() =>
     {
        return connection.IsGameInstanceStarted();
     }, res, 20000);
     gameInstanceStarted_ = connection.IsGameInstanceStarted();
     if (res.completed == false)
     {
        Debug.Log("Game instance start sequence: Time Out");
        yield break;
     }
  }
  Debug.Log("Game instance start sequence: Success");
  connection.AllowSendDataBetweenClients(true);

最終更新

役に立ちましたか?