DiarkisExtension を使用したゲームスレッドでのコールバック
ここでは、DiarkisPluginSample に含まれる DiarkisExtension の DiarkisDispatch クラスを使用して、ゲームスレッドでコールバック関数を実行する方法を説明します。
DiarkisDispatch クラスを使用したイベント処理については、イベント処理の注意点 を参照してください。
DiarkisExtension のインストール
DiarkisExtension のコピー
解凍した DiarkisPluginSample の Source フォルダ内の DiarkisExtension フォルダをチュートリアルプロジェクトの Source フォルダにコピーします。
. ├── Config ├── Content ├── Source │ └── DiarkisExtension ← (ここに配置) ├── Plugins └── Tutorial.uprojectDiarkisExtension をプロジェクトの依存関係に追加
Source/Tutorial/Tutorial.Build.cs を開き、 以下のように DiarkisExtension を依存関係に追加します。
// Tutorial.Build.cs public class Tutorial : ModuleRules { public Tutorial(ReadOnlyTargetRules Target) : base(Target) { PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs; PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "EnhancedInput", "Diarkis", "DiarkisExtension" // <-- 追加 });プロジェクトを再ビルド
DiarkisExtension を追加した後、プロジェクトを再ビルドします。
DiarkisUdpDelegate の子クラスの作成
DiarkisUdpBase クラスのコールバックを受け取るために、 IDiarkisUdpDelegate の子クラスを作成します。
Tools -> New C++ Class をクリックし、親クラスに None を指定します。

DiarkisUdpTutorialDelegate という名前でクラスを作成します。

IDiarkisUdpDelegate クラスを継承します。
コールバックの実装
接続が完了したときのコールバックを実装します。
Delegate クラスを継承したこのクラスでは、ゲームスレッドでコールバック関数が実行されるため、AddOnScreenDebugMessage 関数などの UE 関連の機能を安全に使用することができます。
DiarkisNetworkManager を使用した Diarkis サーバーへの接続
DiarkisDispatch クラスを使用したイベント処理を行うためには、DiarkisNetworkManager クラスを使用して DiarkisInterface インスタンスを管理する必要があります。そこで、TutorialSubsystem クラスを書き換え、DiarkisNetworkManager クラスの ConnectAsync 関数を使います。 DiarkisInterfaceBase::DiarkisInit 関数の呼び出しは DiarkisNetworkManager 内で行われるため、TutorialSubsystem クラス内で呼び出す必要はありません。詳細については、DiarkisNetworkManager クラスの実装を参照してください。
DiarkisUdpTutorialDelegate クラスの登録
ゲームスレッドでコールバックを実行するには、DiarkisUdp クラスの SetDelegate 関数を実行し、IDiarkisUdpDelegate を継承したクラスを登録する必要があります。
DiarkisUdpTutorialDelegate クラスのインスタンスを作成し、DiarkisUdp に登録します。
Deinitialize 関数内で UdpDelegate_ をリセットします。
動作確認
コールバックを実装した後は、再度ビルドし、ゲーム起動時に 画面上に "Connected to the UDP server" というデバッグメッセージとログが表示され、ゲーム終了時に "Disconnected from the UDP server." というログが表示されることを確認します。

ここまでで、UDP サーバーに非同期的に接続し、ゲームスレッドでコールバック関数を実行することができました。
最終更新
役に立ちましたか?

