FieldWalker
FieldWalker の確認手順
目次
サンプル概要
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.5.4 で確認。
確認手順
Windowsの確認手順
FieldWalker.uproject のマウスの右コンテキストメニューから「Visual Studio プロジェクトファイルの生成」を選択する。
Visual Studio で FieldWalker.sln を開く。
ビルド&実行
Windowsで実行する: VisualStudio で
DebugGame_Editor
とWin64
を選択し、ビルドと実行を行う。
Macの確認手順
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
XCode 12.5.1 ( UE4.27 用 )
/ XCode 13.3 ( UE5.0 用 )
で FieldWalker.xcworkspace を開きます。ビルドと実行
File
メニューからWorkspace Setting
を選択し、New Build System
を選択します。Schemeで
FieldWalker
My Mac(XXXXX)
を選択する。
image EditSchemeのBuild Configurationで
DebugGame Editor
を選択してビルド&実行する。
image
選択ビューポート
UE5Editorを起動し、ツールバーの
Play
ボタンをクリックします。Selected Viewport
とMultiplayer Option
でNumber of Players: 1
を選択します。image
各画面の説明
ログイン 画面
起動後、最初に表示されるログインメニューは以下の通りである。
image Diarkisサーバーを指定します。
HostName : Diarkis HTTP サーバの URL を指定します。
ClientKey : DiarkisサーバーにClientKeyがある場合は、それを指定します。ない場合は空欄にしてください。
UID : 他のクライアントと異なるユニークなUIDを指定します。 注意! 他のクライアントと同じUIDを指定すると同期できません。デフォルトでは、この値はマシン名とクライアントのプロセスIDの組み合わせです。
Protocol : 通信方式(UDP/TCP)を選択します。
Start ボタン : InGame に移動し、キャラクター位置の同期を確認できます。
フレームレート設定
Show Stat : フレームレートなどの情報を表示します。
Fix FPS : FPSを修正します。
FPS : 固定FPSを30FPSと60FPSの間で切り替えます。
MainMenu 画面
起動後、最初に表示されるメインメニューは以下の通りである。
image サンプルタイプを選びます。
RoomRandomJoin : 同期する Room を RandomJoinRoom で参加させます。
Field : Field 関数を使用した同期です。Field は使用する Pod (UDP / TCP サーバー) の数に応じて Grid で分割されます。
デフォルトでは、1Podの UDP サーバーが起動しているため、1Mapが4Gridに分割されます。
他のキャラクターが隣の Grid にいても、そのキャラクターが自分の視界内にいれば、そのキャラクターの位置情報が送信されます。
Host/Search ボタン : MatchMaker Host/Search 画面に遷移します。
Ticketボタン : MatchMaker Ticket Menu画面に遷移します。
Disconnectボタン : Diarkis から切断してログインメニューに戻ります。
Random Room 画面
MainMenu画面のStartボタンをクリックすると、InGame画面に遷移し、MainMenu画面で指定した「同期方法」に従ってキャラクターの位置が同期されます。


アプリケーション操作
Main Menu ボタン : メインメニューに戻ります。
P2P Start ボタン : P2P で各端末に接続します。
GroupMsgXX ボタン : グループ機能を使ってメッセージを送信します。
DirectMsgXX ボタン : DirectMessage 機能を使用してメッセージを送信します。
Recovery ボタン : RPC機能を使ってHPを回復します。
wキー:前進 sキー:後退 aキー:右 dキー 左 スペースキー:ジャンプ カメラコントロール マウス 弾丸発射 左マウスボタン
P2P接続の確認方法
Roomで接続した状態で、InGame画面の
P2P Start
ボタンを押す。端末との接続(HolePunch)に成功すると、InGame画面に
P2P Connect: 1 Client
と表示され、端末間でP2P通信が開始されます。MatchMakerを利用してInGameに参加した場合は、MatchMakerの機能を利用してP2Pに移行してください。
Field 画面
Diarkis Field Module
を使用したサンプルになります。Field は Join や Create のような事前コマンドを必要しません。Feild は1つのサーバタイプに1つしか存在せず、ユーザーは一度に1つの位置にしか存在できません。
Server Count
メッシュネットワーク内の Diarkis サーバーの数は、地面に分割する Grid の数に影響します。
4
Grid Size
Field のサイズ。全体の Field のサイズとそれを分割する Grid のサイズを変更されます。
10000
FOV Halfwidth
視界の範囲. 視界の範囲に入るリモートキャラクタが同期されます。
1800
Main Menu
Field を離れ、Main Menu に戻ります。

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

Matching Type :
Rank :
サンプルでは、1-5、6-10、11-15、16-20、...のランクのユーザー同士でマッチングされます。
UIでは、「ランク」で同じ数字、または 5, 8 or 10、または 12 or 15 を選択したユーザー同士とマッチングされます。
Tag : マッチング用のタグ(文字列)。同じタグ同士がマッチングするようになります。
Max Players : 作成する 部屋 の最大人数。この機能はホストに対してのみ有効です。
Room Name : 作成する 部屋 の名前(文字列)。この機能はホストに対してのみ有効です。
Pass : 作成する 部屋 にロックを掛けたい時にしているするパスワード。この機能はホストに対してのみ有効です。
Host Button: マッチング用の 部屋 を作成する場合は、このボタンをクリックします。
Search Button: 既に作成されている 部屋 を検索します。検索が成功すると、Search Matching に部屋のリストが表示されます。
OwnUID : あなたのUIDが表示されます。
Main Menuボタン : メインメニューに戻ります。
Search Matching :
Room Lists: 検索して条件にあった部屋があった場合、入室できる 部屋 が表示されます。
Join ボタン : 入室したい部屋を選択して、Join ボタンで 部屋 に入室します。部屋が既に一杯の場合や、すでにサーバーから部屋が消えている場合など入室に失敗する場合があります。
Disband ボタン : 部屋を解散します。この機能はホストに対してのみ有効です。
Room MemberLists : 部屋に入室しているメンバーの UID リストを表示します。
Leave ボタン : 入室している部屋から退出します。
Kick ボタン : 入室しているメンバーを部屋から退出されます。この機能はホストに対してのみ有効です。
In Game ボタン : 部屋に居るメンバーと InGame に移動します。この機能はホストに対してのみ有効です。
Sync
Sync ボタン : SendMessage に入力されたメッセージがマッチングした全てのホストに送信されます。
Send Message : 送信するメッセージを入力します。送信するメッセージを入力します。
Recv Message : 受信したメッセージが表示されます。
動作確認(マルチプレーオプション)
UEEditorを起動したら、ツールバーの
Play
ボタンを押します。Standalone Game
を選択します。「Multiplayer Option」 で
Number of Players: 2 ~ 4
"を選択します。ネットモード
Net Mode
でスタンドアロンプレイ(Play Standalone)
を選択する。image
複数のWindowが表示されるので、ゲームの
Start
ボタンを押す。UIDが同じでないことを確認してください。そうしないと意図しない動作が起こります。
複数人でプレイする場合、PCのスペックによってはキャラクターの同期に時間がかかる場合があります。
以下の手順は、選択したビューポートの場合と同じです。
image
ログ出力
ログ出力
ログファイルは以下のフォルダに出力されます。
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/Source/FieldWalker
: FieldWalkerGameMode.h / FieldWalkerGameMode.cppFieldWalkerGameMode.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/Source/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/Plugin/Diarkis/Source/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
: Room 機能を制御するためのクラスDiarkisGroup.h / DiarkisGroup.cpp
: Gropu 機能を制御するクラス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プラグインのインターフェースクラス群
コードの場所
FieldWalker/Plugins/Diarkis/Source/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\lib_static)
macos-x64 で使用されるライブラリ
(win-x64\lib_static)
android で使用されるライブラリ
(win-x64\lib_static)
ios で使用されるライブラリ
(win-x64\lib_static)
switch で使用されるライブラリ
(win-x64\lib_static)
ps4 で使用されるライブラリ
(win-x64\lib_static)
ps5 で使用されるライブラリ
(win-x64\lib_static)
ビルドの種類
Debug :
Debug ビルド
xDiarkis ログ出力 有り
Develop :
Release ビルド
xDiarkis ログ出力 有り
Release :
Release ビルド
xDiarkis ログ出力 無し
クラス図
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キャラクターになります。
image
弾の発射
弾の発射処理はリモートホスト側で
RPC
によって呼び出されます。ローカルで弾を発射する場合、あなたがプレイヤーキャラクターのオーナーであれば、RPC
コールがルームに参加している他のホストに送られます。このRPC
呼び出しによって、リモートホストも同じ弾の発射処理を行います。弾丸の衝突とダメージ処理は、アクタのオーナーであるホストによって決定されます。image image
体力同期
ThirdPersonCharacter
の変数Health
はレプリケーションによって同期されます。ThirdPersonCharacter
の所有者であるホストで被弾時にHealth
が減少すると、自動的にリモート側のThirdPersonCharacter
のHealth
変数に同期される。また、Recovery
ボタンによってHealth
が回復すると、その変化は自動的にリモート側のThirdPersonCharacter
に反映される。
動作確認環境
対応プラットフォーム
Windows 10
Mac OS X
Android
iOS
Switch
PS4 / PS5
Xbox Series X|S
UnrealEngine バージョン
5.5.4
UE の バージョン毎の確認環境
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 のパッケージ作成手順
Platform
メニュー =>Windows
=>Package Project
を選択する。パッケージの出力先フォルダを指定する。
ビルドに成功したら、出力先に指定したフォルダから FiledWalker.exe を起動する。
Android 端末で動作確認手順(別途AndroidStudio環境のセットアップが必要)
UnrealEditorのタスクバーから、
設定
⇒プロジェクト設定
をクリックします。Platformの項目で、
Android
をクリックします。image
APKパッケージ
Androidパッケージ
最小SDKバージョン
ターゲットSDKバージョン
ビルド
armv7サポートのチェックを外す(armv7は順次サポートされます)
arm64のサポートをチェックする
Platformの項目で 「Android SDK 」にチェックを入れる
image
以上の各項目を環境に合わせて設定してください。
Android dev kitデバイスを接続し、Androidプラットフォーム用にプロジェクトをパッケージ化する。
image コマンドプロンプトで 「adb start-server 」コマンドを使ってadbサーバーを実行する。
image androidプロジェクトの出力ディレクトリにあるインストールファイルをダブルクリックします。
インストールが完了すると、開発キットのアプリ一覧の最後のページにアプリが表示されます。
アプリを起動すると、最終的にメインメニューが表示されます。
iOS端末での動作確認手順
UrealEditorのタスクバーから、
Settings
=>Project Settings
を押します。プラットフォーム項目の iOS
プロビジョニングプロファイル`設定
証明書`の設定
バンドル表示名`の設定
バンドル名`の設定
バンドル識別子`の設定
iPhoneデバイスを接続し、ツールバー右▽の「Launch」からiPhoneデバイスを選択する。
パッケージのビルドが完了すると、パッケージがアプリに転送されます。
Switch端末での動作確認手順
EpicGamesと
Epic Games Console NDA
を締結し、Switch用のPlatformコードを入手する。UE 4.27.2のプロジェクトコードを入手する。
NintendoSDK 12.3.2をインストールする。
UE 4.27.2の最新サポートはNintendoSDK 12.3.2だからです。
VisualStudio2019 Buildを選択します: Terminal:
Development
を選択します: SwitchProject:
FieldWalker` を選択してビルドする。ビルドには数時間かかります。ビルドしたら、実行してください。
最終更新
役に立ちましたか?