For the complete documentation index, see llms.txt. This page is also available as Markdown.

Diarkis Plugin Sample

DiarkisPluginSample の確認手順

目次

Diarkis Unreal Engine プラグインについて

プラグインの詳細については Diarkis ヘルプセンターの Diarkis Unreal Engine のページを参照してください。

サンプル概要

  • UnrealEngine 用プラグイン Diarkis UnrealEngine Plugin を使用したサンプルプロジェクト (DiarkisPluginSample) です。

  • DiarkisRoom, P2P, RPC, Field, MatchMaker, DirectMessage, Session, Group 機能を確認することができます。

  • 複数の DiarkisPluginSample を起動することで、他のクライアント端末で動作しているキャラクターの位置同期を確認できるサンプルです。

  • キャラクターの位置同期は UDP/TCP プロトコルまたは P2P プロトコルを用いて確認することができます。

  • 対応プラットフォームは、Windows10/11, Mac, iOS, Android, Nintendo Switch 2, PS5, Xbox Series X|S です。

確認手順

Windowsの確認手順

  1. DiarkisPluginSample.uproject の右クリックコンテキストメニューから「Visual Studio プロジェクトファイルの生成」を選択する。

  2. Visual Studio で DiarkisPluginSample.sln を開く。

  3. ビルド&実行

    • Windowsで実行する: VisualStudio で DebugGame_EditorWin64 を選択し、ビルドと実行を行う。

選択ビューポート

  1. UE5Editorを起動し、ツールバーのPlayボタンをクリックします。

    • Selected ViewportMultiplayer OptionNumber of Players: 1を選択します。

      image

各画面の説明

ログイン画面

  • 起動後、以下のログインメニューが最初に表示されます。

    image
  • Diarkisサーバーの設定を行います。

    • HostName : Diarkis HTTP サーバの URL を指定します。

    • ClientKey : DiarkisサーバーにClientKeyがある場合は、それを指定します。ない場合は空欄にしてください。

    • UID : 他のクライアントと異なるユニークなUIDを指定します。 ※ 他のクライアントと同じUIDを指定すると同期できません。デフォルトで、マシン名とクライアントのプロセスIDの組み合わせになっています。

    • Protocol : 通信方式(UDP/TCP)を選択します。

  • Start ボタン : MainMenu 画面に移動します。

  • フレームレート設定

    • Show Stat : フレームレートなどの情報を表示します。

    • Fix FPS : FPSを固定します。

    • FPS : 固定FPSを30FPSと60FPSの間で切り替えます。

  • ログイン後、以下のメインメニューが表示されます。

  • サンプルタイプを選びます。

    • Room : Room 画面に遷移します。

    • Field : Field 画面に遷移します。Field は使用する Pod (UDP / TCP サーバー) の数に応じて Grid で分割されます。

      • デフォルトでは、1Podの UDP サーバーが起動しているため、1Mapが4Gridに分割されます。

      • 他のキャラクターが隣の Grid にいても、そのキャラクターが自分の視界内にいれば、そのキャラクターの位置情報が送信されます。

    • Host/Search : MatchMaker Host/Search 画面に遷移します。

    • Ticket : MatchMaker Ticket 画面に遷移します。

    • DirectMessage : DirectMessage 画面に遷移します。

    • Session : Session 画面に遷移します。

    • Group : Group 画面に遷移します。

    • Zombie : Zombie 画面に遷移します。

    • Disconnect : Diarkis から切断してログインメニューに戻ります。

Room 画面

  • MainMenu 画面の Room ボタンをクリックすると、Room の作成や参加が行える Room 画面に遷移します。

  • Max Members : Room に参加できる最大人数を指定します。

  • Allow Empty : クライアントが誰も参加していない場合でも、Room を保持するかどうかを決定します。

  • TTL : Room が空になった後の生存時間を秒単位で指定します。

  • Interval : サーバがブロードキャストを処理する間隔をミリ秒単位で指定します。

  • Join Random Room ボタン : 利用可能な Room がある場合は、参加し、なければ Room を新規作成します。

  • Create Room ボタン : Room を新規作成します。

  • Join Room ボタン : 指定した Room ID の Room に参加します。

  • Create Or Join By CustomID ボタン : 指定した Custom ID を使い、利用可能な Room がある場合は、参加し、なければ Room を新規作成します。

  • LOD Room Sample ボタン : キャラクターの位置情報で使用する通信データにサーバ側で LOD を適用して通信量を削減するサンプルです。

    • ※ LOD Room Sample の動作確認を行うためには、diarkis-server-template の examples/room/lod の diarkis server を使用する必要があります。

Room InGame 画面

  • Room 画面でボタンをクリックすると、Room InGame 画面に遷移し、キャラクターの位置が同期されます。

  • Back ボタン : Room 画面に戻ります。

  • Copy RoomID ボタン : Room ID をクリップボードにコピーします。Windows, Mac OS, Linux プラットフォームでのみ動作します。

  • P2P Start ボタン : P2P 機能を使って各クライアントとの通信を開始します。

  • Recovery ボタン : RPC機能を使ってHPを回復します。

  • アプリケーション操作

  • P2P接続の確認方法

    • Room InGame 画面のP2P Startボタンをクリックします。

    • クライアントとの接続(HolePunch)に成功すると、Room InGame 画面にP2P Connect: 1 Clientと表示され、クライアント間でP2P通信が開始されます。

LOD Room InGame 画面

  • Room 画面で LOD Room Sample ボタンをクリックすると、LOD Room InGame 画面に遷移し、キャラクターの位置が同期されます。

  • サンプルの動作概要

    • クライアントが送信した位置データをサーバ上で LOD を適用する機能のサンプル実装です

      • クライアントは高頻度で自分の位置をサーバへ送信します

      • サーバではプレイヤーの位置を元に LOD を適用し、近くにいる他のユーザーは高頻度で、遠くにいる他のユーザーは低頻度で位置データを送信するように制御を行い通信量を削減します

    • LOD に関するパラメータはサーバ側に設定を持っており、画面右側に表示しています

      • 設定値

        • Distance(N) cm:

          • サーバの設定項目名: MaxDistanceForNearby

          • LOD 処理を適用開始する距離です。

        • Distance(F) cm:

          • サーバの設定項目名: MaxDistanceForFar

          • LOD 処理が適用される最大距離です。

          • この距離以上離れるとサーバから位置情報が送られなくなります。

        • SyncIntr(N) ms:

          • サーバの設定項目名: SyncIntervalForNearby

          • 更新頻度の最小値です

          • Distance(N) 未満の場合はこの設定で位置情報が送信されます

        • SyncIntr(F) ms:

          • サーバの設定項目名: SyncIntervalForFar

          • 更新頻度の最大値です

    • プレイヤー毎の情報

      • 各リモートキャラクターの頭上にはそのキャラクターの通信状況に関する情報が表示されています

      • TotalSyncs:

        • 総受信パケット数

      • SyncRate:

        • 秒間何パケット受信したか

    • 位置情報全体の通信状況

      • デバッグメッセージの領域に位置同期全体の情報が表示されています

        • 青文字のテキストが実際に計測された値で総パケット数と通信量

        • 黄文字のテキストで LOD を適用しない場合の総パケット数と通信量の概算値

Field 画面

  • MainMenu 画面の Field ボタンをクリックすると、Field 画面に遷移します。

  • Field は Join や Create のような事前コマンドを必要しません。

  • Field は1つのサーバタイプに1つしか存在せず、ユーザーは一度に1つの位置にしか存在できません。

Item
Description
Example

Grid Size

Field のサイズ。全体の Field のサイズとそれを分割する Grid のサイズが変更されます。

10000

Server Count

メッシュネットワーク内の Diarkis サーバーの数は、Field を分割する Grid の数に影響します。

4

FOV Halfwidth

視界の範囲。視界の範囲に入るリモートキャラクターが同期されます。

1800

Main Menu

MainMenu 画面に戻ります。

image

MatchMaker Host/Search 画面

  • ※ この一連のサンプルを実行するには、マッチメイキング用の Diarkis サーバとは別に、TURN というサーバタイプ名で起動している Diarkis サーバが必要です。 環境変数DIARKIS_SERVER_TYPEに TURN を設定し、Diarkis サーバを立ち上げてください。

  • MainMenu 画面の MatchMaker ボタンをクリックすると、MatchMaker 画面に遷移し、MatchMakerでマッチングした相手とInGame(Room)に参加することができます。

  • Matching Type :

    • Rank :

      • 1-5、6-10、11-15、16-20、...のランクのユーザー同士でマッチングされます。

  • Tag : マッチング用のタグ(文字列)。同じタグ同士がマッチングするようになります。

  • Max Players : 作成する Room の最大人数。この機能はホストに対してのみ有効です。

  • Room Name : 作成する Room の名前(文字列)。この機能はホストに対してのみ有効です。

  • Pass : 作成する Room にロックを掛けたい時に指定するパスワード。この機能はホストに対してのみ有効です。

  • Host ボタン: マッチング用の Room を作成する場合は、このボタンをクリックします。

  • Search ボタン: 既に作成されている Room を検索します。検索が成功すると、Search Matching に Room のリストが表示されます。

  • OwnUID : あなたのUIDが表示されます。

  • Main Menuボタン : メインメニューに戻ります。

  • Search Matching :

    • Room Lists: 検索して条件にあった Room があった場合、入室できる Room が表示されます。

    • Join ボタン : 入室したい Room を選択して、Join ボタンで Room に入室します。Room が既に一杯の場合や、すでにサーバーから Room が消えている場合など入室に失敗する場合があります。

    • Disband ボタン : Room を解散します。この機能はホストのみ有効です。

  • Room MemberLists : Room に入室しているメンバーの UID リストを表示します。

    • RoomID : 入室している Room の Room ID が表示されます。

    • Leave ボタン : 入室している Room から退出します。

    • Kick ボタン : 入室しているメンバーを Room から Kick します。この機能はホストのみ有効です。

    • In Game ボタン : Room に居るメンバーと InGame に移動します。この機能はホストのみ有効です。

  • Sync

    • Sync ボタン : SendMessage に入力されたメッセージがマッチングしたメンバーに送信されます。

    • Send Message : 送信するメッセージを入力します。

    • Recv Message : 受信したメッセージが表示されます。

MatchMaker Host/Search InGame 画面

  • MatchMaker Host/Search 画面の InGame ボタンをクリックすると、InGame 画面に遷移します。

  • RoomID : TURN サーバの RoomID が表示されます。 MatchMaker に使用されるRoomとは別のRoomのため、異なるRoomIDが表示されます。

  • Room Member : Room に参加しているメンバーの一覧が表示されます。自分のUIDは青色で表示されます。

  • Receive Message : 受信したメッセージが表示されます。

  • Send Message : 送信するメッセージを入力します。Enter キーを入力するとメッセージが送信されます。

  • Send Message ボタン : SendMessage に入力されたメッセージが Room 内のすべてのユーザーに送信されます。

  • Back ボタン : MatchMaker Host/Search 画面に戻ります。

MatchMaker Ticket 画面

  • MainMenu 画面の Ticket ボタンをクリックすると、MatchMaker Ticket 画面に遷移します。

  • Ticket Type : Ticket Type を指定します。

  • Issue Ticket ボタン : 指定した Ticket Type でマッチングを開始します。

  • マッチングが完了すると以下の画面が表示されます。

  • Cancel ボタン : マッチング中の場合、マッチングをキャンセルします。

  • Leave ボタン : マッチングした Ticket から退出します。

  • Send Message : 送信するメッセージを入力します。Enter キーを入力するとメッセージが送信されます。

  • Send Message ボタン : SendMessage に入力されたメッセージがマッチングしたすべてのユーザーに送信されます。

  • Matched Member : マッチングしたユーザーの一覧が表示されます。

  • Main Menu ボタン : MainMenu 画面に戻ります。

DirectMessage 画面

  • MainMenu 画面の DirectMessage ボタンをクリックすると、DirectMessage 画面に遷移します。

  • My UID : 自分のユーザーIDが表示されます。

  • クリップボードボタン : 右側のクリップボードのアイコンのボタンをクリックすることで、自分のユーザーIDをクリップボードにコピーします。Windows, Mac OS, Linux プラットフォームでのみ動作します。

  • Recipient ID : 送信したいユーザーIDを入力します。

  • Receive Message : 受信したメッセージが表示されます。

  • Send Message : 送信するメッセージを入力します。Enter キーを入力するとメッセージが送信されます。

  • Send Message ボタン : SendMessage に入力されたメッセージが Recipient ID で指定したユーザーに送信されます。

  • Main Menu ボタン : MainMenu 画面に戻ります。

Session 画面

  • MainMenu 画面の Session ボタンをクリックすると、Session 画面に遷移します。

  • Joined Sessions : 参加中の Session のリストが表示されます。クリックすることで Session を選択できます。選択中の Session が青色で表示されます。

  • Invited Sessions : 招待された Session のリストが表示されます。クリックすることで招待された Session Type と Session ID が入力されます。

  • Create ボタン : 入力された Session Type で Session を新規作成します。

  • Join ボタン : 入力された Session Type と Session ID の Session に参加します。

  • Leave ボタン : 入力された Session Type の参加中の Session から退出します。

  • Receive Message : 受信したメッセージが表示されます。

  • Send Message : 送信するメッセージを入力します。Enter キーを入力するとメッセージが送信されます。

  • Send Message ボタン : SendMessage に入力されたメッセージが 選択中の Session 内のすべてのユーザーに送信されます。

  • Joined Member : 選択中の Session に参加しているユーザーの一覧が表示されます。クリックすることで Kick ボタンの入力にユーザーID が入力されます。

  • Kick ボタン : 入力されたユーザーIDを選択中の Session から Kick します。

  • Invite ボタン : 入力されたユーザーIDを選択中の Session に Invite します。

  • Main Menu ボタン : MainMenu 画面に戻ります。

Group 画面

  • ※ Group サンプルは一部の機能が動作していません。

  • MainMenu 画面の Group ボタンをクリックすると、Group 画面に遷移します。

  • Joined Group : 参加中の Group のリストが表示されます。クリックすることで Group を選択できます。選択中の Group が青色で表示されます。

  • RandomJoin ボタン : 利用可能な Group がある場合は、参加し、なければ Group を新規作成します。

  • Create ボタン : Group を新規作成します。

  • Join ボタン : 入力された Group ID の Group に参加します。

  • Leave ボタン : 入力された Group ID の参加中の Group から退出します。Group ID を指定せず、ボタンをクリックした場合は、参加中のすべての Group から退出します。

  • Receive Message : 受信したメッセージが表示されます。

  • Send Message : 送信するメッセージを入力します。Enter キーを入力するとメッセージが送信されます。

  • Send Message ボタン : SendMessage に入力されたメッセージが 選択中の Group 内のすべてのユーザーに送信されます。

  • Joined Member : ※この機能は動作していません。

  • Main Menu ボタン : MainMenu 画面に戻ります。

Zombie 画面

  • MainMenu 画面の Zombie ボタンをクリックすると、CSAR モジュールの動作を確認できる Zombie 画面に遷移します。

  • Min Members : Game Instance に参加できる最少人数を指定します。

  • Max Members : Game Instance に参加できる最大人数を指定します。

  • Game Instance Name : Game Instance Name を指定します。

  • Connection Mode : Game Instance の Connection Mode を指定します。

    • SINGLE_AUTHORITY : ホストクライアント型や DGS など、1 台のマシンが権限を持つモード

  • Network Type : Game Instance の Network Type を指定します。

    • ROOM_AND_P2P : P2P が利用可能であれば P2P で通信し、P2P が利用可能でない場合は Room 経由で通信するタイプ

    • ROOM : Room 経由で通信するタイプ

    • DGS : DGS と通信するタイプ

  • Create/Join Game Instance ボタン: 指定した設定で Game Instance を開始し、Zombie InGame 画面に遷移します。

  • Main Menu ボタン : MainMenu 画面に戻ります。

Zombie InGame 画面

  • Zombie 画面の Create/Join Game Instance ボタンをクリックすると、Zombie InGame 画面に遷移します。

  • 指定したConnection Mode, Network Type でキャラクターの位置を同期します。

  • キャラクターの位置はホストやDGSなどの Authority が管理しています。

  • Zombie は自動でランダムに移動します。

  • Back ボタン: Zombie 画面に戻ります。

  • アプリケーション操作

DGS

  • ※ DGS の動作確認を行うためには、diarkis-server-template の examples/csar/dgs の diarkis server を使用する必要があります。

  1. まず、サーバービルドターゲット用のサンプルプロジェクトをパッケージ化します(これにはソースコード版のUEが必要です)。パッケージ化前に、ビルドターゲットでDiarkisPluginSampleServerがチェックされていることを確認してください

  1. パッケージ化後、パッケージ化されたファイルのBinariesフォルダに移動します。その中にdgsConfigというフォルダがあります。その中にlog.jsonとmesh.jsonファイルがあります。必要に応じて内容を変更してください。

    log.json:

    mesh.json:

  2. ターミナルで、パッケージ化されたフォルダのルートに移動し、下記コマンドでDGSを起動します。

    Windows:

    Linux:

  • log : サーバープロセスがUEログを出力するように設定します。これにより、サーバーが正常に動作しているかどうかを簡単に確認できます。

  • WorkingDir : Windowsで実行する場合は「$(Get-Location)」に、Linuxで実行する場合は「$(pwd)」に設定してください。

  • LogConfigPath : ログ設定ファイルのパスを指定します。

  • MeshConfigPath : メッシュ設定ファイルのパスを指定します。

  • Host : DGS がバインドするホストを指定します。全てのネットワークインターフェースで listen する場合は 0.0.0.0 を指定します。

  • Port : DGS がバインドするポートを指定します。

  • DiarkisCloudEnv : Diarkis は、主要なパブリッククラウドサービスに対応しています。DiarkisCloudEnv は、設定された値に基づいて、DGS サーバーがパブリックアドレスを取得する際のクラウド環境を指定します。この値は、Diarkis DGS を実行しているクラウドサービスと一致している必要があります。

    Cloud Service
    Env Value

    Google Cloud

    GCP

    AWS

    AWS

    Microsoft Azure

    AZURE

    Tencent

    TENCENT

    Alibaba Cloud

    ALIBABA

    Linode

    LINODE

    ローカルで実行する場合はホスト名またはIPアドレスを設定することが可能です。

  • (任意) FPSOverride : ゲームサーバーのFPS。指定しない場合、この値は60になります

  1. クライアント側でゾンビメニューに移動し、ネットワークタイプをDGSに設定した後、Create/Join Game Instanceをクリックしてください。少なくとも2人のクライアントが参加するまでキャラクターは生成されません。

動作確認(マルチプレーオプション)

  1. UEEditorを起動したら、ツールバーのPlayボタンを押します。

    • Standalone Gameを選択します。

    • 「Multiplayer Option」 で Number of Players: 2 ~ 4を選択します。

    • ネットモードNet Modeスタンドアロンプレイ(Play Standalone)を選択する。

      image
  2. 複数のWindowが表示されるので、ゲームの Start ボタンを押す。

    • UIDが同じでないことを確認してください。そうしないと意図しない動作が起こります。

    • 複数人でプレイする場合、PCのスペックによってはキャラクターの同期に時間がかかる場合があります。

  3. 以下の手順は、選択したビューポートの場合と同じです。

コードについて

C++ サンプルコード

DiarkisPluginSample 側の主なコード(Diarkis Pluginを利用したサンプル)

  • DiarkisPluginSample/Source/DiarkisPluginSample

    • DiarkisPluginSampleGameMode.h / DiarkisPluginSampleGameMode.cpp : ゲームを管理するメインクラス ( AGameModeBase )

    • DiarkisPluginSampleCharacter.h / DiarkisPluginSampleCharacter.cpp : キャラクターのクラス ( ADiarkisCharacter )

  • DiarkisPluginSample/Source/DiarkisPluginSample/Diarkis

    • DiarkisSampleBase.h / DiarkisSampleBase.cpp : Diarkisプラグインを使用するためのベースクラス

    • DiarkisSampleInterface.h / DiarkisSampleInterface.cpp : Diarkis Pluginを使用するためのインターフェースクラス

    • DiarkisSample.h / DiarkisSample.cpp : Diarkis Pluginを使用するサンプルクラス

Diarkis Plugin + Sample の主なコード

メソッド
範囲
役割

libDiarkis

Diarkis Plugin

Diarkis ライブラリ

diarkis-module Client

Diarkis Plugin

Diarkisライブラリを制御するインターフェースの親クラス

diarkis-module Extension

Sample コード

Diarkisライブラリを制御するインターフェースの子クラス群

DiarkisNetwork

Sample コード

Diarkisプラグインのインターフェースクラス

EventEmitter

Sample コード

BluePrint で Diarkis コールバックイベントを受け取るためのクラス群(旧)

Delegate

Sample コード

アプリレイヤーで Diarkis コールバックイベントを受け取るためのクラス群(新)

libDiarkis のコードについて

    • 役割の概要

      • Diarkis C++ライブラリ

    • コードの場所

      • DiarkisPluginSample/Plugins/Diarkis/Source/SDK/platforms/

    • 各ライブラリのファイル

      • win-x64 で使用されるライブラリ (win-vs2019/lib/x86_64-MD/<ビルドの種類>/lib_static)

      • macos-x64 で使用されるライブラリ (macos/lib/macos-arm64/<ビルドの種類>/lib_static)

      • ios で使用されるライブラリ (ios/lib/iOS/<ビルドの種類>/lib_static)

      • android で使用されるライブラリ (android/lib/<ABI>/<ビルドの種類>/lib_static)

      • ps5 で使用されるライブラリ (ps5/lib/<ビルドの種類>/lib_static)

      • xbox series で使用されるライブラリ (xbox-series/lib/MD/<ビルドの種類>/lib_static)

      • Nintendo Switch 2 で使用されるライブラリ (Ounce-ounce-a64/lib/<ビルドの種類>/lib_static)

    • ビルドの種類

      • debug : Debug ビルド x Diarkis ログ出力 有り

      • develop : Release ビルド x Diarkis ログ出力 有り

      • release : Release ビルド x Diarkis ログ出力 無し

diarkis-module Client のコードについて

  • 役割の概要

    • Diarkisライブラリを制御するインターフェースの親クラス

  • コードの場所

    • DiarkisPluginSample/Plugins/Diarkis/Source/SDK/diarkis-module/Client

  • 各クラス

    • DiarkisInterfaceBase.h / DiarkisInterfaceBase.cpp : Diarkis をコントロールするインターフェースクラス( libDiarkis をコントロール)

    • DiarkisUdpBase.h / DiarkisUdpBase.cpp : UDP 機能の Base クラス

    • DiarkisTcpBase.h / DiarkisTcpBase.cpp : TCP 機能の Base クラス

    • DiarkisP2PBase.h / DiarkisP2PBase.cpp : P2P 機能の Base クラス

    • DiarkisRoomBase.h / DiarkisRoomBase.cpp : Room 機能の Base クラス

    • DiarkisMatchMakerBase.h / DiarkisMatchMakerBase.cpp : MatchMaker 機能の Base クラス

    • DiarkisGroupBase.h / DiarkisGroupBase.cpp : Group 機能の Base クラス

    • DiarkisFieldBase.h / DiarkisFieldBase.cpp : Field 機能の Base クラス

    • DiarkisSessionBase.h / DiarkisSessionBase.cpp : Session 機能の Base クラス

    • DiarkisDirectMessageBase.h / DiarkisDirectMessageBase.cpp : DirectMessage 機能の Base クラス

    • DiarkisRPCBase.h / DiarkisRPCBase.cpp : RPC 機能の Base クラス

    • LoggerFactory.h / LoggerFactory.cpp : Logger 機能の Main クラス

    • ConnectionManager.h / ConnectionManager.cpp : CSAR 機能の Main クラス

    • DiarkisServerBase.h / DiarkisServerBase.cpp : CSAR DGS 機能の Main クラス

diarkis-module Extension のコードについて

  • 役割の概要

    • Diarkisライブラリを制御するインターフェースの子クラス群

  • コードの場所

    • DiarkisPluginSample/Source/DiarkisExtension

  • 各クラス

    • Character(キャラクターデータ同期クラス)

      • DiarkisCharacter.h / DiarkisCharacter.cpp : Diarkisのキャラクター同期用のクラス。

    • Component (位置同期用の Diarkis コンポーネントクラス)

      • DiarkisSyncComponent.h / DiarkisSyncComponent.cpp : Diarkis位置同期コンポーネントクラス

      • DiarkisCharacterSyncComponent.h / DiarkisCharacterSyncComponent.cpp : アクタの作成時にカスタムデータを送受信するためのサンプル実装コンポーネントクラス

    • Movement(Diarkisの位置同期クラス)

      • DiarkisMovementController.h : 位置同期コンポーネントのインターフェースクラス

      • DiarkisLocalMovementSync.h / DiarkisLocalMovementSync.cpp : ローカル用の位置同期コンポーネントクラス。

      • DiarkisRemoteMovementSync.h / DiarkisRemoteMovementSync.cpp : リモート用のロケーション同期コンポーネントクラス。

    • Diarkis/Utils (ユーティリティクラス)

      • DiarkisUtils.h / DiarkisUtils.cpp : ライブラリを制御するためのインターフェースクラス

    • ライブラリを制御するためのインターフェースクラス(XXXBaseから派生)

      • DiarkisInterface.h / DiarkisInterface.cpp (XXXBase から派生したクラス)

      • DiarkisRoom.h / DiarkisRoom.cpp : Room 機能を制御するためのクラス

      • DiarkisGroup.h / DiarkisGroup.cpp : Group 機能を制御するクラス

      • DiarkisField.h / DiarkisField.cpp : Field 機能を制御するクラス

      • DiarkisTcp.h / DiarkisTcp.cpp : TCP 機能を制御するクラス

      • DiarkisUdp.h / DiarkisUdp.cpp : UDP 関数を制御するクラス

      • DiarkisP2P.h / DiarkisP2P.cpp : P2P 機能を制御するクラス

      • DiarkisMatchMaker.h / DiarkisMatchMaker.cpp : MatchMaker機能を制御するクラス

      • DiarkisRPC.h / DiarkisRPC.cpp : RPC機能を制御するクラス

      • DiarkisSyncData.h / DiarkisSyncData.cpp : Diarkisのロケーション同期を処理するクラス

      • DiarkisReplication.h / DiarkisReplication.cpp : 部屋のプロパティを使用した変数のレプリケーションを行うクラス

      • DiarkisActorManagement.h / DiarkisActorManagement.cpp : Diarkisが管理するアクターを識別するID

DiarkisNetwork のコードについて

  • 役割の概要

    • Diarkis プラグインのインターフェースクラス群

  • コードの場所

    • DiarkisPluginSample/Source/DiarkisExtension/XXXXX/

  • 各クラス - DiarkisNetworkManager.h / DiarkisNetworkManager.cpp : Diarkis Plugin を管理するメインのクラス - DiarkisNetworkSubsystem.h / DiarkisNetworkSubsystem.cpp : UDiarkisNetworkManager インスタンスを保持するクラス - DiarkisNetworkBlueprintLibrary.h / DiarkisNetworkBlueprintLibrary.cpp : ブループリント関数として Diarkis プラグインのコールバックイベントを登録するクラス。 - Modulesディレクトリ(Diarkis のステータスをチェックし、コールバックイベントをキューに入れるクラス)

    • DiarkisNetworkModuleBase.h / DiarkisNetworkModuleBase.cpp : Diarkis のステータスをチェックしてコールバックイベントをキューに溜める基底クラス

    • DiarkisNetworkRoom.h / DiarkisNetworkRoom.cpp : Diarkis の Room のステータスをチェックし、コールバックイベントをキューに入れるクラス。

    • DiarkisNetworkGroup.h / DiarkisNetworkGroup.cpp : Diarkis の Group のステータスをチェックし、コールバックイベントをキューに入れるクラス。

    • DiarkisNetworkField.h / DiarkisNetworkField.cpp : Diarkis の Field のステータスをチェックし、コールバックイベントをキューに入れるクラス。

    • DiarkisNetworkP2P.h / DiarkisNetworkP2P.cpp : Diarkisの P2P のステータスをチェックし、コールバックイベントをキューに入れるクラス。

    • DiarkisNetworkMatchMaker.h / DiarkisNetworkMatchMaker.cpp : Diarkis の MatchMaker のステータスをチェックし、コールバックイベントをキューに入れるクラス。

Blueprint用 コールバックイベント キューイング のコードについて

  • 役割の概要

    • BluePrint で Diarkis コールバックイベントを受け取るためのクラス群(旧)

  • コードの場所

    • DiarkisPluginSample/Source/DiarkisExtension/XXXXX/Events

  • 各クラス

    • Interfaces ディレクトリ(Diarkis Plugin のコールバックを受け取るインターフェースクラス)

      • DiarkisNetworkCoreEvent.h : Diarkis Plugin の Core 機能のコールバックを受け取るインターフェースクラス

      • DiarkisNetworkRoomEvent.h : Diarkis Plugin の Room 機能のコールバックを受け取るインターフェースクラス

      • DiarkisNetworkGroupEvent.h : Diarkis Plugin の Group 機能のコールバックを受け取るインターフェースクラス

      • DiarkisNetworkFieldEvent.h : Diarkis Pluginの Field 機能のコールバックを受け取るインターフェースクラス

      • DiarkisNetworkP2PEvent.h : Diarkis Plugin の P2P 機能のコールバックを受け取るインターフェースクラス

      • DiarkisNetworkMatchMakerEvent.h : Diarkis Plugin の MatchMaker 機能のコールバックを受け取るインターフェースクラス

    • Emitters ディレクトリ(Diarkis イベントをキューイングするクラス)

      • DiarkisNetworkCoreEventEmitter.h / DiarkisNetworkCoreEventEmitter.cpp : Diarkis Core イベントをキューイング用クラス

      • DiarkisNetworkEventEmitterBase.h / DiarkisNetworkEventEmitterBase.cpp : 様々なイベントを生成するためのベースクラス

      • DiarkisNetworkRoomEventEmitter.h / DiarkisNetworkRoomEventEmitter.cpp : Diarkis Room イベントをキューイング用クラス

      • DiarkisNetworkGroupEventEmitter.h / DiarkisNetworkGroupEventEmitter.cpp : Diarkis Group イベントのキューイング用クラス

      • DiarkisNetworkFieldEventEmitter.h / DiarkisNetworkFieldEventEmitter.cpp : Diarkis Field イベントのキューイング用クラス

      • DiarkisNetworkP2PEventEmitter.h / DiarkisNetworkP2PEventEmitter.cpp : Diarkis P2P イベントのキューイング用クラス

      • DiarkisNetworkMatchMakerEventEmitter.h / DiarkisNetworkMatchMakerEventEmitter.cpp : Diarkis MatchMaker イベントのキューイング用クラス

イベントの Delegate のコードについて

  • 役割の概要

    • アプリレイヤーで Diarkis コールバックイベントを受け取るためのクラス群(新)

  • コードの場所

    • DiarkisPluginSample/Source/DiarkisExtension/XXXXX/Delegate

  • 各クラス

    • DiarkisDispatch.h / DiarkisDispatch.cpp : Diarkis のコールバックイベントをキューイングや実行するクラス

    • DiarkisRoomDelegate.h : Diarkis の Room のコールバックイベントをキューに入れるクラス

    • DiarkisUDPDelegate.h : Diarkis の UDP のコールバックイベントをキューに入れるクラス

    • DiarkisP2PDelegate.h : Diarkisの P2P のコールバックイベントをキューに入れるクラス

    • DiarkisMatchMakerDelegate.h : Diarkis の MatchMaker のコールバックイベントをキューに入れるクラス

クラス図

  • Diarkisプラグインのクラス図

    イメージ
  • Diarkis Pluginをカスタマイズするには

    • Diarkisライブラリを制御するインターフェースクラス(図の上段赤枠)から派生したクラスを用意し、その処理をカスタマイズする。

    • ADiarkisPluginSampleを参考にカスタマイズしてください。

  • キャラクター同期に関連するクラス図

    image
  • 同期方法をカスタマイズする

    • DiarkisLocalMovementSyncDiarkisRemoteMovementSyncから派生したクラスを用意して処理をカスタマイズするか、ADiarkisCharacterから派生したクラスを用意して処理をカスタマイズする。

同期機能について

Diarkis Plugin で同期できる機能について

Field Walkerのサンプルには、Diarkis Pluginを使って同期できる以下の機能のサンプルが含まれています。

  • アクターインスタンス管理

  • アクターロケーション同期

  • 変数のレプリケーション

  • RPC

これらの機能は、標準的なUEの通信処理とは異なる実装となっているため、通常の通信処理とは別に設定・実装する必要があります。また、Diarkis Room機能を用いて同期を実装するため、Roomを用いた通信が可能な状態である必要があります。

アクターのインスタンス管理

  • DiarkisSyncComponent を持つアクターがローカルで作成または削除されると、アクターインスタンス管理のための情報がリモートに送信され、各ホスト上に同じアクターインスタンスが存在するように同期されます。マップ上に最初に配置されたアクタは、既に作成されたインスタンスから再利用され、動的に作成されたアクタはリモート上で動的に生成されます。

  • DiarkisSyncComponentは、Diarkisネットワーク上のアクタを識別するために使用されるDiarkisアクタIDを持っています。また、DiarkisSyncComponentのオーナーかどうかを判断し、この情報を使ってローカルとリモートの動作を切り替えることができる。例えば、ThirdPerson_AnimSyncBP はこのフラグを使用して、ローカルの CharacterMovement から情報を取得するか、通信によって取得した情報を使用するかを切り替える。

  • Actor IDと所有者フラグは、Diarkisネットワークに接続して必要な情報が利用可能になった後に利用可能になる。DiarkisSyncComponentには OnDiarkisActorIDDecided イベントがあり、このイベントが発生すると知ることができます。例えば、ThirdPersonCharacterBegin Playはこのイベントを使用して、オーナーが決定した後にレプリケーションとRPC登録処理を行います。

  • リモートアクターの作成時にカスタムデータを追加することも可能です。 UDiarkisCharacterSyncComponent::SerializeSpawnActorCustomPayload() でリモートアクター作成データにカスタムデータを追加し、UDiarkisCharacterSyncComponent::DeserializeSpawnActorCustomPayload() を呼び出して受信データから必要な情報を取得します。

アクターの位置同期

  • アクターに DiarkisSyncComponent を追加することで、これらの機能が有効になります。同じRoomに接続されている他のホストにも同じActorが自動的に作成されます。リモートの ThirdPersonCharacter は位置、姿勢、ジャンプ状態などを自動的に同期します。リモートホストが Room を離れると、ローカルに存在するリモートアクターも自動的に削除されます。

変数のレプリケーション

  • アクターが持つ変数をネットワーク経由で同期します。対象となる変数には UPROPERTY() を指定する必要があります。Register Replicated Variableで対象のActorと変数名を登録し、Send Replicated Variableで必要なタイミングでデータを送信します。ただし、送信間隔は DiarkisReplication::replicationMinimumInterval が最も短いタイミングとなる。サンプルでは、ThirdPersonCharacter ブループリントの Register Replicated VariablesSend Replicated Variable に実装があります。

RPC

  • RPCはネットワーク経由でActorの関数を呼び出す関数です。対象の関数には UFUNCTION() を指定する必要があります。RegisterRpcUEFuncNameで対象のActorと変数名を指定して関数を登録し、SendRpcUEFuncAllなどで送信します。リモート側で RPC を受信すると、同じ Actor ID を持つ Actor の指定した名前のメソッドを呼び出します。サンプルでは ThirdPersonCharacter のブループリントの RPC を登録し、ADiarkisPluginSampleCharacter::HandleFire()RPC を送信しています。

サンプル上で同期を利用している機能

本サンプルでは、上記の関数を用いて以下の処理を実装しています。

プレイヤーキャラクターの生成・位置の同期

  • ローカルでThirdPersonCharacterを作成すると、同じRoomに接続している他のホストでも自動的に同じアクターが作成されます。リモートの ThirdPersonCharacter は位置、姿勢、ジャンプ状態などを自動的に同期します。リモートホストが Room を離れると、ローカルに存在するリモートアクターも自動的に削除されます。また、リモートのプレイヤーキャラクターを作成する際には、オーナーが決定したアクターの色が初期データとして渡され、すべてのホストで同じ外見を再現します。

弾の発射

  • 弾の発射処理はリモートホスト側で RPC によって呼び出されます。ローカルで弾を発射する場合、あなたがプレイヤーキャラクターのオーナーであれば、 RPC コールがルームに参加している他のホストに送られます。このRPC呼び出しによって、リモートホストも同じ弾の発射処理を行います。弾丸の衝突とダメージ処理は、アクタのオーナーであるホストによって決定されます。

    image
    image

体力同期

  • ThirdPersonCharacterの変数 Health はレプリケーションによって同期されます。ThirdPersonCharacterの所有者であるホストで被弾時に Health が減少すると、自動的にリモート側の ThirdPersonCharacterHealth 変数に同期される。また、RecoveryボタンによってHealthが回復すると、その変化は自動的にリモート側のThirdPersonCharacterに反映される。

動作確認環境

  • 対応プラットフォーム

    • Windows 10/11

    • Mac OS X

    • iOS

    • Android

    • PS5

    • Xbox Series X|S

    • Nintendo Switch 2

  • UnrealEngine バージョン

    • 5.6.1

UE の バージョン毎の確認環境

  • UE 5.6.1

    • VisualStudio 2022

      • WindowsSDK バージョン 10.0.22621.0

      • MSVC 14.38.33130

    • Mac/iOS 環境

      • macOS 14 Sonoma

      • Xcode 16.2

    • Android 環境

      • Android Studio Koala Feature Drop | 2024.1.2 Patch 1

      • Android NDK 27.2.12479018

      • Android 14.0 (API 34)

    • PS5 環境

      • UE5 ベースコード

        • 5.6.1 リリース タグ

      • PS5 SDK バージョン 11.00.00.46

    • Xbox Series X|S 環境

      • UE5 ベースコード

        • 5.6.1 リリース タグ

      • GDK: 250402

    • Nintendo Switch 2 環境

      • Nintendo SDK 20.5.6

  • UE 5.5.4

    • VisualStudio 2022

      • WindowsSDK バージョン 10.0.22621.0

      • MSVC 14.38.33130

    • PS5 環境

      • UE5 ベースコード

        • 5.5.4 リリース タグ

      • PS5 SDK バージョン 10.000

    • Xbox Series X|S 環境

      • UE5 ベースコード

        • 5.5.4 リリース タグ

      • GDK: 240302

動作確認手順

Windows のパッケージ作成手順

  1. Platform メニュー => Windows => Package Project を選択する。

  2. パッケージの出力先フォルダを指定する。

  3. ビルドに成功したら、出力先に指定したフォルダから DiarkisPluginSample.exe を起動する。

Android 端末で動作確認手順(別途AndroidStudio環境のセットアップが必要)

  1. UnrealEditorのタスクバーから、設定プロジェクト設定をクリックします。

  2. Platformの項目で、Androidをクリックします。

    image
  • APKパッケージ

    • Androidパッケージ

    • 最小SDKバージョン

    • ターゲットSDKバージョン

  • ビルド

    • armv7サポートのチェックを外す(armv7は順次サポートされます)

    • arm64のサポートをチェックする

  1. Platformの項目で Android SDK をクリックします。

    image
  • 以上の各項目を環境に合わせて設定してください。

  1. Android プラットフォーム用にプロジェクトをパッケージングします。

    image
  2. USBデバッグを有効にした Android デバイスを PC に接続します。

  3. Android プロジェクトの出力ディレクトリにあるインストールスクリプト(Install_***.bat)を実行し、アプリをインストールします。

  4. アプリを起動すると、ログイン画面が表示されます。

最終更新

役に立ちましたか?