Unreal Engine 5を使ってみる その21(ObjectDeliverer、Node-RED、TCP/UDP通信)

はじめに

 今回はUnreal EngineのプラグインであるObject Delivererを利用して、Node-REDとのTCP/UDP通信を試してみました。

 HTTP通信については以前の記事で利用したことがあります。

▼こちらの記事でHTTP Blueprintを試しました。

Unreal Engine 5を使ってみる その8(HTTP Request、Remote Control Web Interface、Node-RED)

はじめに  今回はUnreal Engine 5(UE5)のHTTP RequestノードとRemote Control Web Interfaceを使ってみました。  UE5との通信に関する方法を模索中です。どちらもH [&he…

 HTTP通信では通信間隔が遅いことがあったので、他の通信方法を利用できないか探していました。TCP/UDP通信の方が高速なら、今後利用していこうと思います。

▼以前の記事はこちら

Unreal Engine 5を使ってみる その14(CSVファイルへの保存、Node-RED)

はじめに  今回はUnreal Engine 5(UE5)をNode-REDと連携させて、UE5の情報をCSVファイルに保存してみました。  UE5をシミュレーション用途で使っていると、CSVファイル…

Unreal Engine 5を使ってみる その16(測距センサーを用いた簡易的なスキャン、Node-RED)

はじめに  今回は測距センサーを利用してLiDARのようにスキャンできないかな?と思ったので、まずはUnreal Engine 5 (UE5) のシミュレーション環境で試してみました。  …

プラグインの追加

 今回はUnreal Engine 5.5を利用します。

▼PCは10万円ぐらいで購入したゲーミングノートPCを利用しています。Windows 11の環境です。

ちょっと買い物:新しいノートPCとSSDの増設

はじめに  今回はこれまで使っていたPCが壊れたので買い替えましたという話です。  以前はよく分からないGPUが載っていたノートPCを使っていたのですが、最近はUnreal E…

 ObjectDelivererは有料のプラグインです。購入して、エンジンにインストールしました。

▼Fabでの販売ページはこちら

https://www.fab.com/ja/listings/b6ffd7d7-80da-483f-a7fa-09cb46b72651

▼Epic Games LauncherのFabライブラリから、Unreal Engine 5.5にプラグインをインストールしました。

▼プロジェクトでプラグインを追加して、再起動しました。

 なおドキュメントとサンプルのページがあります。

▼ドキュメントはこちら

Plugin:ObjectDeliverer - AyumaxSoft

ObjectDeliverer A library that makes it easy to switch between various communication methods such as TCP/IP, UDP, shared memory, and file-based communication. …

▼GitHubのサンプルプロジェクトのページはこちら。プラグインが入っているので、購入しなくても試せそうです。

https://github.com/ayumax/ObjectDeliverer

 サンプルとなるブループリントは、これらのページを参考にしています。

TCP通信

 予めNode-REDのTCPノードで送受信の方法を確認しておきました。

▼tcp requestとtcp inノードで確認しました。

▼4010ポートでメッセージの受信ができました。Bufferですね。

▼詳細をクリックすると、stringやrawで表示することができます。

 同様にして、まずはUnreal Engine側からデータを送信してみます。

▼サンプルをもとに、Event Begin Playで実行する処理のフローを作成しました。送信先は先程の4010ポートです。

▼状況に合わせた表示をオフにしないと、Startなどのノードが表示されないことがありました。

▼Event Tickでデータを送信します。

 この状態でプレイしてみました。

▼メッセージを受信できました!

▼最初の文字は取り除く必要があるかもしれません。

 次に、Unreal Engine側で受信できるか試してみました。

▼色々試した結果、以下のフローなら受信できました。

 先程とは違ってPacket RuleはNodividionでないと、受信した結果が出力されませんでした。

▼Node-REDからはtcp requestノードと、tcp outノードで送信してみました。

▼受信できました!

 これでTCP通信による双方向通信ができました。送受信用にそれぞれStartしたいときは、Delivery Boxを別変数で定義する必要があります。

▼なお、Unreal Engineからデータを送信するときのPacket RuleもNodividionにしてみると、余計な文字が含まれていませんでした。

UDP通信

 UDP通信も予めNode-REDでの通信方法を確認しておきました。

▼5010ポートで送信と受信をするようにしたところ、通信できていました。

 同様にUnreal Engineとも通信してみます。TCP通信のときのフローで、Protocolだけ変更すると通信できました。

▼UDP SocketのSenderとReceiverに変更しています。

▼Node-RED側は5010ポートで受信して、5020ポートに送信するようにしています。

 実行して動作を確認しました。

▼送受信できました!

 UDP通信でも双方向に通信できました。Protocolだけ変更すれば通信方法を変更できるのは楽でいいですね。

最後に

 HTTP通信以外の通信手法も利用できるようになりました。細かく検証したわけでは無いのですが、HTTP通信のときよりも高速なのではないかと思います。

 Shared Memoryの方が早そうな気がするので、また試してみます。そもそもプログラミングでShared Memoryを扱ったことが無いので、JavaScriptとPythonで扱えるのか調べようと思っています。

 今回はプラグインのノードを利用したわけですが、標準で用意しておいてほしいところですね。オンラインマルチプレイ以外で通信して使う用途があまりないのでしょうか。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です