専用サーバーを設定する

プロジェクト用の専用サーバーを設定して、パッケージ化する方法について説明します。

Choose your operating system:

Windows

macOS

Linux

Unreal Engine が使用する サーバー クライアント モデルは、1 台のサーバーがゲームの ホスト として機能し、複数のプレイヤーが クライアント としてそのゲームに参加するネットワーク マルチプレイヤー ゲームです。サーバーが実際のゲーム状態を調整し、各プレイヤーは 自律型プロキシ を使用してリモートでポーンをコントロールします。次に、サーバーは接続されている各クライアントに変更を レプリケート することで、すべてのプレイヤーがサーバー上でプレイしている状態に近い環境を創出します。

リッスン サーバー は自分のマシンでゲームをホストしているプレイヤーを表し、専用サーバー はヘッドレスで動作するサーバーです。ヘッドレス サーバーはビジュアルをレンダリングすることもなく、このサーバー上でユーザーがローカルにプレイすることもありません。このため、専用サーバーはゲームプレイ ロジックとクライアントからの受信する情報の調整に集中することができ、ゲームのホスティングに専用サーバーのリソースを最大限に活用することができます。さらに、マルチプレイヤー ゲームに参加しているすべてのプレイヤーに、一貫したプレイ フィールドを保証することができます。リッスン サーバーは、多くの場合、カジュアルなマルチプレイヤーや連携プレイに適しており、専用サーバーは大規模なゲームや対戦ゲームに適しています。

この操作ガイドでは、マルチプレイヤー ゲーム用の専用サーバーを構築して、パッケージ化する方法について説明します。

1. 必要なセットアップ

この操作ガイドの手順を実行するには、プロジェクトが次の要件を満たしている必要があります。

  • Epic Games Github からダウンロードできる Unreal Engine のソース ビルドを使用している。

    • プロジェクトが Epic Games Launcher のバイナリ ビルドを使用している場合は、Github のソース ビルドに移行する必要がある。

  • サーバー クライアントのマルチプレイヤー ゲームプレイをサポートできる C++ プロジェクトが必要。

    • ブループリント プロジェクトを使用している場合は、作業を進める前に C++ プロジェクトに変換する必要がある。

この例では、サードパーソン テンプレート の新しいプロジェクトを例として使用します。

新しいマルチプレイヤー プロジェクトを一からビルドするには、マルチプレイヤーの基本的なメカニズムをサードパーソン テンプレートに追加する「ネットワーク マルチプレイヤー クイック スタート ガイド」を参照してください。

2. サーバー ビルド ターゲットをセットアップする

専用サーバーは、プロジェクト用の独立した ビルド ターゲット です。専用サーバーを作成する際には、ゲーム本編とは異なる実行可能ファイルを作成します。「TestProjectGame.exe」ではなく、「TestProjectServer.exe」という名前の実行可能ファイルを作成し、この実行可能ファイルを起動すると、コンピュータで専用サーバーが起動します。このセクションでは、サーバーのビルド ターゲットをプロジェクトに追加してコンパイルするプロセスについて説明します。

  1. プロジェクトの C++ ソリューションを開きます。これはプロジェクトのフォルダにあります。この例では、「MyProject.sln」という名称です。

    ProjectSolutionInFolder.png

    C++ ソリューションがない場合は、.uproject ファイルを右クリックして、[Generate Visual Studio Project Files (Visual Studio プロジェクト ファイルの生成)] をクリックすると、作成できます。

  2. ソリューション エクスプローラー で、「Source」フォルダを展開して、「[Project].Target.cs」ファイルを見つけます。これがプロジェクトのデフォルトのビルド ターゲットです。また、Unreal Editor でこのプロジェクトをビルドする方法を設定するための「[Project]Editor.Target.cs」ファイルもあります。この同じディレクトリにサーバー ビルド ターゲットを作成します。

    TestProjectTarget.png

  3. Windows エクスプローラー で、「Source」フォルダ を開きます。「[ProjectName].Target.cs」のコピーを作成して、「[ProjectName]Server.Target.cs」という名前に変更します。ここでは、作成されたファイルの名前は「TestProjectServer.Target.cs」です。

    ServerTargetInFolder.png

  4. Visual Studio に戻り、エクスプローラーのウィンドウから「*Server.Target.cs」をクリックして、ソリューション エクスプローラ の「Source」フォルダにドラッグします。

    TestProjectServerTarget.png

  5. [ProjectName]Server.Target.cs」を開いて、内容を次のターゲット ファイルの指示に置き換えます。

    // Copyright Epic Games, Inc. All Rights Reserved.
    
    using UnrealBuildTool;
    using System.Collections.Generic;
    
    public class TestProjectServerTarget : TargetRules //Change this line according to the name of your project
    {
        public TestProjectServerTarget(TargetInfo Target) : base(Target) //Change this line according to the name of your project
        {
            Type = TargetType.Server;
            DefaultBuildSettings = BuildSettingsVersion.V2;
            ExtraModuleNames.Add("TestProject"); //Change this line according to the name of your project
        }
    }

    必ず、TestProject のすべてのインスタンスを自分のプロジェクトの名前に置き換えてください。

  6. ベース ディレクトリでプロジェクトの .uproject ファイルを見つけて、そのファイルを 右クリック し、[Generate Visual Studio Project Files (Visual Studio プロジェクト ファイルの生成)] を選択します。この操作により、ゲーム用の Visual Studio ソリューションが再生成され、「*Server.Target.cs」ファイルが検出されます。

  7. [Development Editor (開発エディタ)] ビルド コンフィギュレーションを選択します。

  8. ツールバーの [Build (ビルド)] > [Build Solution (ソリューションのビルド)] をクリックしてソリューションを ビルド します。これは、[Solution Explorer (ソリューション エクスプローラー)] ウィンドウのコンテキスト メニューからも実行できます。

  9. [Development Server (開発サーバー)] ビルド コンフィギュレーションを選択して、ソリューションを再 ビルド します。

  10. プロジェクトの「Binaries/Win64」フォルダを見つけます。このフォルダに、「[ProjectName]Server.exe」などのサーバー ファイルがあることを確認します。

    DedicatedServerExecutables.png

    この実行可能ファイルは、専用サーバーのデプロイに使用します。

3. エントリとデフォルト マップを設定する

専用サーバーをテストするには、サーバーがプレイ可能なマップを実行し、ユーザーがサーバーに接続できるように、プロジェクトのデフォルト マップを設定する必要があります。さまざまな方法がありますが、最も迅速かつ直接的な方法は、アプリケーションの起動時にユーザーのエントリ マップに接続フローを直接ビルドすることです。

  1. Unreal Editor でプロジェクトを開きます。コンテンツ ブラウザ で、必ず、すべての レベル ファイル を「Content/Maps」フォルダに再配置します。これを行うには、「Maps」フォルダを「ThirdPersonCPP」からベースの「Content」フォルダに移動します。

    MoveMapFiles.png

  2. [ProjectName]Entry という名称の新しいレベルを作成します。[ProjectName] はプロジェクト名に置き換えます。この例では、TestProjectEntry という名称になります。これは、開始テンプレートとして空白のマップを使用して作成することができます。

    EntryMap.png

  3. Entry マップを開いてから、Level Blueprint スクリプトを開きます。BeginPlay ノードから、Open Level ノードを追加して「127.0.0.1」という値を指定します。これは、ユーザーのローカル IP アドレスで、自分のコンピュータ上にあるサーバーに接続するようにゲームに指示していることを示します。この値を有効な IP アドレスに置き換えると、そのアドレスにあるサーバーに接続します。

    通常、エントリ マップでは、メインメニューの UI を設定します。この例では、エントリ レベルはユーザー自身のローカル IP に直接接続するだけで、専用サーバーにすばやく接続できるようにします。UI を含むフル機能のエントリ マップの例については、「ShooterGame サンプル プロジェクト」を参照してください。

  4. ThirdPersonExampleMap を開いて、通常レベルにあらかじめ配置されている サードパーソン キャラクター を削除します。代わりに、レベルに 2 つの PlayerStarts があることを確認します。これにより、プレイヤーが接続したときに、一貫したスタートアップ体験が得られます。

  5. [Project Settings (プロジェクト設定)] を開いて、[Project (プロジェクト)] > [Maps and Modes (マップ & モード)] を選択し、[Default Maps (デフォルト マップ)] を展開します。デフォルト マップを次のように変更します。

    パラメータ名

    Editor Startup Map

    [ProjectName]Entry

    Game Default Map

    [ProjectName]Entry

    Transition Map

    None

    Server Default Map

    ThirdPersonExampleMap

    これにより、ユーザーがエントリ マップを開いてサーバーに接続している間に、サーバーが ThirdPersonExampleMap を直接開きます。

4. プロジェクトをパッケージ化する

  1. [File (ファイル)] > [Packaging (パッケージ化)] > [Packaging Settings (パッケージング設定...)] をクリックして、パッケージング設定を開きます。

  2. 矢印付きの長方形のボタンをクリックして、[Packaging (パッケージ化)] セクションの下部にある [Advanced settings (詳細設定)] を展開します。

  3. [List of Maps to Include in a Packaged Build (パッケージ化されたビルドに含めるマップのリスト)] を見つけて、Entry マップと ThirdPersonExampleMap の両方を追加します。

  4. [File (ファイル)] > [Package Project (プロジェクトをパッケージ化)] > [Windows (64-bit) (Windows (64 ビット)] をクリックして、プロジェクトをパッケージ化するディレクトリを選択します。この例では、出力フォルダとして「TestProject/Packaged」を使用します。

  5. [File (ファイル)] > [Package Project (プロジェクトをパッケージ化)] > [Build Target (ビルド ターゲット)] をクリックします。通常のビルド ターゲットの横に [プロジェクト名] Server が表示されていることを確認します。このオプションを選択します。

  6. プロジェクトを再度パッケージ化して、先ほどと同じ出力フォルダを選択します。これで、WindowsServer の横に 「WindowsServer」という名前のフォルダが表示されます。

5. 専用サーバーを起動して、テストする

最後に、専用サーバーをテストします。

  1. 前のセクションで作成した「WindowsServer」フォルダを開き、[プロジェクト名] Server.exe を特定します。この例では、「TestProjectServer.exe」という名前です。

  2. Server.exe」のショートカットを作成して、その名前を編集して末尾に「 - ThirdPersonExampleMap」を追加します。この例では、「TestProjextServer.exe - ThirdPersonExampleMap」という名前に変更しました。

  3. サーバーのショートカット右クリック して、プロパティ を開きます。[Target (ターゲット)] フィールドの末尾に「-log」を追加して、[Apply (適用)] をクリックします。

    ShortcutProperties.png

    これで、専用サーバーを実行すると、コマンド プロンプトにログが表示されます。前のセクションの設定に従って、サーバーは既に ThirdPersonExampleMap を開いているので、このショートカットにマップ パラメータを追加する必要はありません。

  4. ショートカットダブルクリック して、専用サーバーを起動します。コマンド プロンプト ウィンドウが開き、アウトプット ログが表示されます。サーバーが正常に起動した場合は、レベルの表示にかかった秒数が一番下に出力されます。

    DedicatedServerCommandPrompt.png

  5. WindowsNoEditor」フォルダに移動して、「TestProject.exe」をダブルクリックします。これで新しいウィンドウでゲームが起動して、ThirdPersonExampleMap に直接移動するように表示されます。

  6. ALT+Tab を使用してそのゲーム ウィンドウを保持したまま、「TestProject.exe」を実行してゲームの 2 つ目のインスタンスを起動します。正常に起動したら、起動したウィンドウにプレイヤーが表示されます。また、サーバー ログを確認すると、両方のプレイヤーがサーバーに接続していることを確認できます。

DedicatedServerRunning.png

これで終了です。これで、プロジェクトの専用サーバーの構築、パッケージ化、およびテストが完了しました。

応用編

この例では、ローカル マシン上でサーバーを構築して、パッケージ化し、テストする基本的な方法について説明しました。次のステップでは、機能するフロントエンドを提供し、ゲームのゲームプレイを拡張し、プレイヤーがインターネットを介して専用サーバーに接続するための手段を提供します。

機能するフロントエンドの例を確認するには、ShooterEntry マップでフロントエンドを使用している「ShooterGame サンプル プロジェクト」を参照してください。

ゲームプレイの拡張を開始するには、「ネットワーク マルチプレイヤー クイックスタート ガイド」を参照してください。

ネットワーク経由でサーバーに接続するには、「127.0.0.1」ではなくそのサーバーの IP アドレスを指定します。この IP アドレスは、エントリ マップの BeginPlay から実行するのではなく、シンプルな UMG UI に組み込むことができます。また、コンソールで "open" コマンドを使用して、レベル名の代わりに IP アドレスを指定することもできます。

Unreal Engine のドキュメントを改善するために協力をお願いします!どのような改善を望んでいるかご意見をお聞かせください。
調査に参加する
キャンセル