LogoLogo
日本語
日本語
  • Diarkis ヘルプセンター
  • Diarkis の概要
  • 始めよう
    • Diarkis サーバーテンプレート
    • Diarkis クライアント SDK
    • チュートリアル
      • 1. Diarkis サーバーをローカル環境で起動する
      • 2. テストクライアントで疎通確認する
      • 3. カスタムコマンドを実装する
      • Diarkis クライアントからサーバに接続する
    • サンプル
  • Diarkis のモジュール
    • Room モジュール
      • Room モジュールをサーバーでセットアップする
      • Room サンプル
        • room_broadcast
      • Room モジュールをクライアントから利用する
      • Room のその他の機能
    • MatchMaker モジュール
      • MatchMaker モジュールをサーバーでセットアップする
    • Field モジュール
      • Field モジュールをサーバーでセットアップする
    • P2P モジュール
      • P2P モジュールをサーバーでセットアップする
      • P2P サンプル
    • DM (Direct Message) モジュール
      • DM モジュールをサーバーでセットアップする
    • Notifier モジュール
      • Notifier モジュールをサーバーでセットアップする
    • Session モジュール
      • Session モジュールをサーバーでセットアップする
    • Group モジュール
      • Group モジュールをサーバーでセットアップする
  • Diarkis サーバー
    • Diarkis サーバをクラウド環境で起動する
      • AWS
    • Diarkis サーバーを Windows 環境で起動する
    • MARS サーバー
    • UDP サーバー
    • TCP サーバー
    • HTTP サーバー
    • Metrics API
    • サーバー間通信 - Mesh
  • Diarkis クライアント
    • ランタイム・ライブラリ
      • Diarkis RUDP
    • Diarkis Module
      • Diarkis Module の初期化と終了
      • Diarkis Module のカスタイマイズ
      • Diarkis Module のロギング・システム
      • マイグレーション
      • Diarkis のスレッド
    • CSAR (Clustered Server Authoritative Ruler)
    • サンプル
      • C++
        • room_broadcast
        • directmessage_simple
        • group_sample
        • matching_and_turn
        • matchmaker_ticker
        • p2p_rudp_sample
        • session_simple
      • Unreal Engine Plugin
        • FieldWalker
      • Unity Plugin
        • FieldWalker
          • HowToReplicatePosition.md
  • Diarkis ツール
    • Diarkis CLI
      • cgo を利用するプロジェクトをビルドする方法
      • Diarkis CLI v3 への切り替え手順
  • リファレンス
    • API リファレンス
    • リリースノート
      • v1.0
      • v1.0.1
      • v1.0.2
      • v1.0.3
      • v1.0.4
      • v1.0.5
      • v1.0.6
  • サポート
    • ライセンスと購入
GitBook提供
このページ内
  • FieldWalker の確認手順
  • 目次
  • サンプル概要
  • 確認手順
  • Windowsの確認手順
  • Macの確認手順
  • 選択ビューポート
  • 各画面の説明
  • ログイン 画面
  • MainMenu 画面
  • InGame 画面
  • MatchMaker 画面
  • 動作確認(マルチプレーオプション)
  • ログ出力
  • ログ出力
  • ログレベルの変更
  • コードについて
  • FieldWalker 側の主なコード(Diarkis Pluginを利用したサンプル)
  • Diarkis Pluginの主なコード
  • Client のコードについて
  • Extension のコードについて
  • DiarkisNetwork のコードについて
  • libDiarkis のコードについて
  • クラス図
  • 同期機能について
  • Diarkis Plugin で同期できる機能について
  • サンプル上で同期を利用している機能
  • 動作確認環境
  • UE 5.3.2
  • 動作確認手順
  • Windows10のパッケージ作成手順
  • Android端末で動作確認手順(別途AndroidStudio環境のセットアップが必要)
  • iOS端末での動作確認手順
  • Switch端末での動作確認手順

役に立ちましたか?

  1. Diarkis クライアント
  2. サンプル
  3. Unreal Engine Plugin

FieldWalker

FieldWalker の確認手順

目次

  • サンプル概要

  • 確認手順

    • Windowsの確認手順

    • Macの確認手順

    • 動作確認 (選択ビューポート)

  • 各画面の説明

    • ログイン 画面

    • MainMenu 画面

    • InGame 画面

    • MatchMaker 画面

  • ログ出力

    • ログ出力

    • レベルの変更

  • コードについて

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

    • Diarkis Pluginの主なコード

    • Client のコードについて

    • Extension のコードについて

    • DiarkisNetwork のコードについて

    • libDiarkis のコードについて

  • クラス図

  • 同期機能について

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

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

  • 動作確認環境

    • UE 5.3.2

  • 動作確認手順

    • Windows10のパッケージ作成手順

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

    • iOS端末での動作確認手順

    • Switch端末での動作確認手順

サンプル概要

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

  • Diarkisの Room、Group、Field、P2P、MatchMaker、RPC、DirectMessage 機能を確認することができます。

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

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

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

  • UE5.3.2で確認。

確認手順

Windowsの確認手順

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

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

  3. ビルド&実行

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

Macの確認手順

  1. FieldWalker.uproject のマウスコンテキストメニューから 「Generate XCode Project」 を選択する。

    • 処理が失敗した場合は、以下のシェルコマンドを実行してFieldWalker.xcworkspaceを作成する。

      UE4.27 の場合

      sh 「/{PATH_TO_ENGINE}/UE_4.27/Engine/Build/BatchBiles/Mac/GenerateProjectFiles.sh」 -project=「/{PATH_TO_PROJECT}/FieldWalker.uproject」 -game

      UE5.0 の場合

      sh 「/{PATH_TO_ENGINE}/UE_5.0/Engine/Build/BatchFiles/Mac/GenerateProjectFiles.sh」 -project=/{PATH_TO_PROJECT}/FieldWalker/FieldWalker.uproject -game
  2. XCode 12.5.1 ( UE4.27 用 ) / XCode 13.3 ( UE5.0 用 ) で FieldWalker.xcworkspace を開きます。

  3. ビルドと実行

    • FileメニューからWorkspace Settingを選択し、New Build Systemを選択します。

    • SchemeでFieldWalker My Mac(XXXXX)を選択する。

    • EditSchemeのBuild ConfigurationでDebugGame Editorを選択してビルド&実行する。

選択ビューポート

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

    • Selected ViewportとMultiplayer OptionでNumber of Players: 1を選択します。

各画面の説明

ログイン 画面

  • 起動後、最初に表示されるログインメニューは以下の通りである。

  • Diarkisサーバーを指定します。

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

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

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

    • プロトコル : 通信方式(UDP/TCP)を選択します。

  • Start ボタン : InGame に移動し、キャラクター位置の同期を確認できます。

  • フレームレート設定

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

    • Fix FPS : FPSを修正します。

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

MainMenu 画面

  • 起動後、最初に表示されるメインメニューは以下の通りである。

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

    • RoomRandomJoin : 同期する Room を RandomJoinRoom で参加させます。

    • Field : Field 関数を使用した同期です。Field は使用する Pod (UDP / TCP サーバー) の数に応じて Grid で分割されます。

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

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

    • MatchMaker ボタン : MatchMaker Menu 画面に遷移します。SyncMethodには影響しません。。

    • Ticketボタン : Ticket Menu画面に遷移します。SyncMethodには影響しません。

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

InGame 画面

  • MainMenu画面のStartボタンをクリックすると、InGame画面に遷移し、MainMenu画面で指定した「同期方法」に従ってキャラクターの位置が同期されます。

  - **回復ボタン :** RPC機能を使ってHPを回復します。
  - **P2P Start ボタン :** P2P で各端末に接続します。
  - **GroupMsgXX ボタン :** グループ機能を使ってメッセージを送信します。
  - **DirectMsgXX ボタン :** DirectMessage 機能を使用してメッセージを送信します。
  - **Main Menuボタン :** メインメニューに戻ります。
  • アプリケーション操作

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

    • Roomで接続した状態で、InGame画面のP2P Startボタンを押す。

    • 端末との接続(HolePunch)に成功すると、InGame画面にP2P Connect: 1 Clientと表示され、端末間でP2P通信が開始されます。

    • MatchMakerを利用してInGameに参加した場合は、MatchMakerの機能を利用してP2Pに移行してください。

MatchMaker 画面

  • マッチングの種類

    • ランクマッチング

      • サンプルでは、1-10、11-20、21-30、31-40、...のランクのユーザー同士でマッチングされます。

      • UIでは、「ランク」で同じ数字、または 5 or 8 or 10、または 12 or 15 を選択したユーザー同士とマッチングされます。

    • RateAndPlayによるマッチング

      • 「Rating」と「Play」の組み合わせが同じユーザーとマッチングします。

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

  • マッチメーカー

    • マッチングタイプに基づいてマッチングが行われます。

    • ホストボタン : マッチングのホストになりたい場合はこのボタンをクリックしてください。

    • 検索ボタン : ゲストとしてマッチングする場合は、このボタンをクリックします。

    • MatchMaker UID Lists : マッチングしたメンバーのUIDリストを表示します。

    • Abortボタン : マッチング検索から除外します。この機能はホストに対してのみ有効です。

    • 解除ボタン : 一致を解除します。この機能はホストのみ利用可能です。

    • Completeボタン : マッチングを完了し、マッチング検索からホストを削除します。この機能はホストのみ利用可能です。

    • マッチングを終了します。この機能はゲストのみ利用可能です。

  • チームマッチメーカー

    • TeamMatchMakerはマッチングタイプに基づいてチームをマッチングさせますが、TeamMatchMakerをチェックする際には、MatchMakerで使用したマッチングタイプと異なる必要があります。

    • チームホストボタン : あなたがチームマッチングのホストである場合、このボタンをクリックしてください。このボタンはMatchMakerでホストを務めた人だけが使用できます。

    • チーム検索ボタン : ゲストとしてマッチングを行いたい場合は、このボタンをクリックしてください。

    • TeamMatchMaker UID Lists : マッチングしたメンバーの UID リストを表示します。

    • 中止ボタン : マッチング検索からチームを除外します。この機能はホストに対してのみ有効です。

    • Completeボタン : 照合を完了し、照合検索から除外します。この機能はホストのみ有効です。

  • 同期

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

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

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

  • Startボタン : マッチしたメンバーとのInGameに移動します。

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

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

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

    • Standalone Gameを選択します。

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

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

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

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

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

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

ログ出力

ログ出力

  • ログファイルは以下のフォルダに出力されます。

  • FieldWalker/logs/○○○/および以下のフォルダ(OOOOはユーザID)。

  • ログはデバッグビルド時のみ出力されます。

  • Developmentビルドでもログを出力したい場合は、DiarkisInterfaceBaseのコンストラクタでbOutputLog = trueを調整してください。

  • DiarkisInterfaceBase コンストラクタでは、LogOutType でファイル出力とデバッグ出力を切り替えることができます。

ログレベルの変更

  • LoggerFactoryコンストラクタでは、ログ出力レベルを変更できます。

  • ログ出力レベルは、クライアントライブラリの各機能(UDP、TCP、Socket、Room、P2P、MatchMaker、Runtimeなど)ごとに設定できます。

  • Baseクラスで設定したログについては、Runtimeで出力レベルを指定することができます。

    severities({
    { "TCP", DiarkisLoggerSeverity::Info },
      { "UDP", DiarkisLoggerSeverity::Info },
      { "RUDP", DiarkisLoggerSeverity::Info },
      { "Socket", DiarkisLoggerSeverity::Info },
      { "Field", DiarkisLoggerSeverity::Info },
      { "Scheduler", DiarkisLoggerSeverity::Info },
      { "Thread", DiarkisLoggerSeverity::Info },
      { "P2P", DiarkisLoggerSeverity::Info },
      { "Room", DiarkisLoggerSeverity::Info },
      { "Group", DiarkisLoggerSeverity::Info },
      { "MatchMaker", DiarkisLoggerSeverity::Info },
      { "UDP-Stats", DiarkisLoggerSeverity::Info },
      { "CryptoServer", DiarkisLoggerSeverity::Info },
      { "CryptoP2P", DiarkisLoggerSeverity::Info },
      { "RPC", DiarkisLoggerSeverity::Info },
      { "DirectMessage", DiarkisLoggerSeverity::Info },
      { "Session", DiarkisLoggerSeverity::Info },
      { "Runtime", DiarkisLoggerSeverity::Debug }
        })
    ```
    
  • 例えば、DiarkisLoggerSeverity::Warningを設定すると、以下の順番でWarning以下の出力が得られます。

       //! Log Level: Detail
       Verbose = 0,
       //! Log Level: Debug Information
       Debug,
       //! Log level: information
       Info,
       //Log level: Information Log Level: Warning
       Warning,
       //! Log Level: Error
       Error,
       //! Log Level: Fatal Error
       Fatal,
       //! Log level: None
       None
    None 

コードについて

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

  • FieldWalker/ソース/FieldWalker : FieldWalkerGameMode.h / FieldWalkerGameMode.cpp

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

    • FieldWalkerCharacter.h / FieldWalkerCharacter.cpp : キャラクタのクラス ( ADiakisCharacter )

  • FieldWalker/Source/FieldWalkerDiarkis.

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

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

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

Diarkis Pluginの主なコード

メソッド
役割

クライアント

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

拡張

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

DiarkisNetwork

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

libDiarkis

Diarkis ライブラリ

Client のコードについて

  • 役割の概要

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

  • コードの場所

    • FieldWalker/Plugins/Diarkis/ソース/Diarkis/クライアント

  • 各クラス

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

    • DiarkisRoomBase.h / DiarkisRoomBase.cpp : ルーム機能の親クラス(コントロール libDiarkis)

    • DiarkisGroupBase.h / DiarkisGroupBase.cpp : グループ機能の親クラス (controls 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 を制御)

Extension のコードについて

  • 役割の概要

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

  • コードの場所

    • FieldWalker/プラグイン/Diarkis/ソース/Diarkis/Extension

  • 各クラス

    • 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 : ルーム機能を制御するためのクラス

      • DiarkisGroup.h / DiarkisGroup.cpp : グループ機能を制御するクラス

      • DiarkisField.h / DiarkisField.cpp : フィールド機能を制御するクラス

      • 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プラグインのインターフェースクラス群

  • コードの場所

    • FieldWalker/Plugins/Diarkis/ソース/Diarkis/DiarkisNetwork

  • 各クラス

    • Event/Interfaces`(Diarkis PluginのRoom機能のコールバックを受け取るインターフェースクラス)

      • 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 イベント用のインターフェース

    • イベントエミッター`(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フィールドイベントのキューイング用クラス

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

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

    • Modules`(DiarkisのRoom機能の状態をチェックし、コールバックイベントをキューに入れるクラス)

      • DiarkisNetworkModuleBase.h / DiarkisNetworkModuleBase.cpp : DiarkisのMatchMakerイベントをキューイングするクラス

      • 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関数の状態をチェックし、コールバックイベントをキューに入れるクラス。

    • DiarkisNetworkBlueprintLibrary.h / DiarkisNetworkBlueprintLibrary.cpp : ブループリント関数としてDiarkisプラグインのコールバックイベントを登録するクラス。

    • DiarkisNetworkManager.h / DiarkisNetworkManager.cpp : Diarkis Pluginを管理するクラス

    • DiarkisNetworkSubsystem.h / DiarkisNetworkSubsystem.cpp : UDiarkisNetworkManagerインスタンスを保持するクラス

libDiarkis のコードについて

  • 役割の概要

    • Diarkis C++ライブラリ

  • コードの場所

    • FieldWalker/Plugins/Diarkis/Source/ThirdParty/libDiarkis/prebuilt

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

    • win-x64で使用されるライブラリ (win-x64\bin\diarkis.dll)

    • macos-x64で使用されるライブラリ (macos-x64\lib\diarkis.dylib)

    • android で使用されるライブラリ (android\libs\arm64-v8a\diarkis.so)

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

    • switch で使用されるライブラリ (nx64\Libraries\NX-NXFP2-a64\Release\libdiarkis.a)

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

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

クラス図

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

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

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

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

  • 文字同期に関連するクラス図

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

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

同期機能について

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

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

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

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

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

  • RPC

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

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

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

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

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

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

アクターの位置同期

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

変数のレプリケーション

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

RPC

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

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

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

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

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

AI キャラクタの管理

  • AIは特定のホストでのみ実行され、他のホストでは位置情報が同期されます。このサンプルでは、AIキャラクターはルームオーナーであるホスト上で実行され、その結果は通常のアクターの位置情報と同期されます。ルームオーナーが退室すると、新しいルームオーナーにAIキャラクターを扱う権限が委譲されます。緑色の2人のキャラクターがAIキャラクターになります。

弾の発射

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

体力同期

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

動作確認環境

  • 対応プラットフォーム

    • Windows 10

    • Mac OS X

    • アンドロイド iOS

    • iOS

    • ニンテンドースイッチ

    • PS4 / PS5

    • Xbox シリーズ X|S

  • UnrealEngineバージョン

    • 5.3.2

UE 5.3.2

  • VisualStudio 2022

  • WindowsSDK バージョン 10.0.19041.0

  • アンドロイド環境

    • 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 ベースコード

        • 「git@github.com:Diarkis/UnrealEngine.git」リポジトリ

        • 5.0.2 リリース タグ

        • コミット: d11782b9046e9d0b130309591e4efc57f4b8b037

      • UE PS4 プラットフォーム用パッケージ

        • EpicGamesが別途提供するポータルサイトから、コンソールPS4用のコードを入手してください。

        • PS4_5.0.2-release.zipパッケージを使用してください。

      • PS4 SDK バージョン 9.508.001

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

    • PS5環境

      • UE5ベースコード

        • 「git@github.com:Diarkis/UnrealEngine.git」リポジトリ

        • 5.0.2 リリース タグ

        • コミット: d11782b9046e9d0b130309591e4efc57f4b8b037

      • UE PS5 プラットフォーム用パッケージ

        • EpicGames が別途提供するポータルサイトから、Console PS5 のコードを入手してください。

        • PS5_5.0.2-release.zip パッケージを使用してください。

      • PS5 SDK バージョン 5.000.00.41

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

    • Xbox シリーズ X|S 環境

      • UE5ベースコード

        • 「git@github.com:Diarkis/UnrealEngine.git」リポジトリ

        • 5.0.2 リリース タグ

        • コミット: d11782b9046e9d0b130309591e4efc57f4b8b037

      • UE Xbox Series X|S プラットフォーム用パッケージ

        • EpicGamesが別途提供するポータルサイトから、Console Xbox [GDK]のコードを入手してください。

        • GDK_5.0.2-release.zipパッケージを使用してください。

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

動作確認手順

Windows10のパッケージ作成手順

  1. Edit メニュー => Package Project => Windows 10 (64bit) を選択する。

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

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

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

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

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

  • APKパッケージ

    • Androidパッケージ

    • 最小SDKバージョン

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

  • ビルド

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

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

  1. Platformの項目で 「Android SDK 」にチェックを入れる

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

  1. Android dev kitデバイスを接続し、Androidプラットフォーム用にプロジェクトをパッケージ化する。

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

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

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

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

iOS端末での動作確認手順

  1. UrealEditorのタスクバーから、Settings => Project Settingsを押します。

  2. プラットフォーム項目の iOS

    • プロビジョニングプロファイル`設定

    • 証明書`の設定

    • バンドル表示名`の設定

    • バンドル名`の設定

    • バンドル識別子`の設定

  3. iPhoneデバイスを接続し、ツールバー右▽の「Launch」からiPhoneデバイスを選択する。

  4. パッケージのビルドが完了すると、パッケージがアプリに転送されます。

Switch端末での動作確認手順

  1. EpicGamesとEpic Games Console NDAを締結し、Switch用のPlatformコードを入手する。

  2. UE 4.27.2のプロジェクトコードを入手する。

  3. NintendoSDK 12.3.2をインストールする。

    • UE 4.27.2の最新サポートはNintendoSDK 12.3.2だからです。

  4. VisualStudio2019 Buildを選択します: Terminal: Development を選択します: SwitchProject:FieldWalker` を選択してビルドする。

  5. ビルドには数時間かかります。ビルドしたら、実行してください。

前へUnreal Engine Plugin次へUnity Plugin

最終更新 2 か月前

役に立ちましたか?

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

image
image
image
image
image
image
image
image
image
イメージ
image
image
image
image
image
image
image
image