Diarkis Plugin Sample

DiarkisPluginSample の確認手順

目次

サンプル概要

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

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

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

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

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

  • UE 5.6.1 で確認。

確認手順

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の間で切り替えます。

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

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

    • 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 画面に遷移します。

    • 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 を新規作成します。

Room InGame 画面

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

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

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

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

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

  • アプリケーション操作

  wキー: 前進
  sキー: 後退
  aキー: 左に移動
  dキー: 右に移動
  スペースキー: ジャンプ
  カメラコントロール: マウス
  弾丸発射: 左マウスボタン
  • P2P接続の確認方法

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

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

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 Name : 作成する 部屋 の名前(文字列)。この機能はホストに対してのみ有効です。

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

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

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

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

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

  • Search Matching :

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

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

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

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

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

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

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

    • In Game ボタン : 部屋に居るメンバーと 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 ボタンをクリックすると、Lobby 画面に遷移します。

  • RoomID (Tag) : マッチメイキングのための Room ID が表示されます。

  • Lobby Member UID : ロビーにいるユーザーのユーザーIDが表示されます。

  • Start ボタン : Ticket によるマッチメイキングを開始します。

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

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

  • マッチメイキングした2人のユーザーIDが表示されます。

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

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 画面に戻ります。

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

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

    • Standalone Gameを選択します。

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

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

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

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

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

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

    image

コードについて

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/ThirdParty/libDiarkis/prebuilt

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

    • win-x64 で使用されるライブラリ (win-x64\lib_static)

    • macos-x64 で使用されるライブラリ (macos-x64\lib_static)

    • android で使用されるライブラリ (android\lib_static)

    • ios で使用されるライブラリ (iOS\lib_static)

    • switch で使用されるライブラリ (nx64\lib_static)

    • ps4 で使用されるライブラリ (ps4\lib_staic)

    • ps5 で使用されるライブラリ (ps5\lib_staic)

  • ビルドの種類

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

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

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

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

  • 役割の概要

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

  • コードの場所

    • DiarkisPluginSample/Plugins/Diarkis/Source/Diarkis/Client

  • 各クラス

    • DiarkisInterfaceBase.h / DiarkisInterfaceBase.cpp : UEからDiarkisを制御するためのインターフェースクラス(libDiarkis を制御)

    • DiarkisRoomBase.h / DiarkisRoomBase.cpp : ルーム機能の親クラス(libDiarkis を制御)

    • DiarkisGroupBase.h / DiarkisGroupBase.cpp : グループ機能の親クラス (libDiarkis を制御)

    • DiarkisFieldBase.h / DiarkisFieldBase.cpp : フィールド機能の親クラス(libDiarkis を制御)

    • DiarkisTcpBase.h / DiarkisTcpBase.cpp : TCP 機能の親クラス (libDiarkis を制御)

    • DiarkisUdpBase.h / DiarkisUdpBase.cpp : UDP 機能の親クラス(libDiarkis を制御)

    • DiarkisP2PBase.h / DiarkisP2PBase.cpp : P2P 機能の親クラス(libDiarkis を制御)

    • DiarkisMatchMakerBase.h / DiarkisMatchMakerBase.cpp : MatchMaker 機能の親クラス(libDiarkis を制御)

    • DiarkisRPCBase.h / DiarkisRPCBase.cpp : RPC 機能の親クラス(libDiarkis を制御)

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 の Group のコールバックイベントをキューに入れるクラス

    • 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

    • Android

    • iOS

    • Switch

    • PS4 / PS5

    • Xbox Series X|S

  • UnrealEngine バージョン

    • 5.6.1

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

  • UE 5.6.1

    • VisualStudio 2022

      • WindowsSDK バージョン 10.0.22621.0

      • MSVC 14.38.33130

    • PS5 環境

      • UE5 ベースコード

        • 5.6.1 リリース タグ

      • PS5 SDK バージョン 11.00.00.46

    • Xbox Series X|S 環境

      • UE5 ベースコード

        • 5.6.1 リリース タグ

      • GDK: 250402

  • 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

  • UE 5.3.2

    • VisualStudio 2022

    • WindowsSDK バージョン 10.0.19041.0

    • Android 環境

      • android-studio-2020.3.1.22-windows.exe

      • Android NDK 22.1.7171670

      • Android 6.0 (APIレベル23)

    • Mac/iOS 環境

      • XCode 13.3

  • UE 5.0.2

    • PS4 環境

      • UE5 ベースコード

        • 5.0.2 リリース タグ

      • PS4 SDK バージョン 9.508.001

      • PS4システムソフトウェア 9.600.011

    • PS5 環境

      • UE5ベースコード

        • 5.0.2 リリース タグ

      • PS5 SDK バージョン 5.000.00.41

      • PS5システムソフトウェア 5.50.00.08

    • Xbox Series X|S 環境

      • UE5ベースコード

        • 5.0.2 リリース タグ

      • GDK: 211001 2021年10月アップデート 1

動作確認手順

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 dev kitデバイスを接続し、Androidプラットフォーム用にプロジェクトをパッケージ化する。

    image
  2. コマンドプロンプトで 「adb start-server 」コマンドを使ってadbサーバーを実行する。

    image
  3. Androidプロジェクトの出力ディレクトリにあるインストールファイルをダブルクリックします。

  4. インストールが完了すると、開発キットのアプリ一覧の最後のページにアプリが表示されます。

  5. アプリを起動すると、最終的にメインメニューが表示されます。

最終更新

役に立ちましたか?