このページでは、Unreal Engine側でTCP/IPサーバーを動かし、ObjectDeliverer Testerアプリをクライアントとして接続して、メッセージの送受信を完了するまでを説明します。
前提
Blueprintの構成
完成すると、次のようなBlueprintになります。BeginPlayでマネージャーを作成して通信を開始し、EndPlayで終了します。

1. ActorのBlueprintを作成する
- Content BrowserでBlueprint Class → Actorを作成し、名前を
BP_ObjectDelivererServerなどにします。 - Event Graphを開き、
BeginPlayとEndPlayイベントを表示します。
2. ObjectDelivererManagerを作成する
Create Object Deliverer Managerを実行し、戻り値を変数(例: Deliverer)に保存します。型はObject Deliverer Manager参照です。
通信中はこの変数を参照し続けるため、ローカル変数ではなくメンバー変数に保存してください。以降の手順でもDeliverer変数を使用します。
3. イベントをバインドする
Delivererから次の3つのイベントを接続します。
| イベント | 発生タイミング | 引数の意味 |
|---|---|---|
Connected | 接続の準備が完了したとき | ClientSocket 接続相手を表すオブジェクト |
Disconnected | 接続が切断されたとき | ClientSocket 切断した接続相手 |
ReceiveData | データを受信したとき | ClientSocket 送信元、Buffer 受信バイト列 |
この手順では、ConnectedとReceiveDataにPrint Stringを接続して、動作を確認できるようにします。
4. StartでTCP/IPサーバーを開始する
DelivererのStartノードに、次の2つを接続してBeginPlayから実行します。
Create Protocol Tcp Ip Server— ポートは9099を指定します。Create Packet Rule Size Body— 初期値(Size Length = 4、Size Buffer Endian = Big)を使用します。
StartのDeliveryBoxピンは未接続のままにします。未接続の場合、送受信はバイト配列で行われます。
5. PIEでサーバーを起動する
PIEを開始します。この時点ではまだConnectedは発生しません。TCP/IPサーバーはクライアントの接続を待ち受けている状態です。
6. Testerアプリから接続する
ObjectDeliverer Testerを起動し、次のとおり設定して接続します。
- 通信方式にTCP/IP Clientを選択します。
- パケット分割ルールにSizeBodyを選択します。
- 接続先に
localhost、ポートに9099を指定して接続します。
接続が成功すると、Unreal Engine側でConnectedイベントが発生し、Print Stringの出力を確認できます。
7. Testerからメッセージを送受信する
Testerアプリからメッセージを送信すると、Unreal Engine側でReceiveDataイベントが発生します。Bufferには送信したデータがバイト列として格納されています。BufferのLengthをPrint Stringで出力すると、送信したデータサイズが確認できます。
次に、Unreal Engine側から送信します。DelivererのSendノードに任意のバイト配列を渡して実行すると、Testerアプリの受信欄にデータが届きます。
バイト配列のかわりに文字列で送受信したい場合は、ユースケースのDeliveryBoxを切り替えるを参照してください。
8. 通信を終了する
EndPlayからDelivererのCloseを呼び出します。PIEを終了すると、接続中のクライアントが切断され、通信に使ったリソースが解放されます。
Closeを呼ばずにレベルを切り替えると、接続が残ったままになることがあります。終了処理は必ず入れてください。
エラー時の確認
| 症状 | 確認する項目 |
|---|---|
Connectedが発生しない | Testerの通信方式がTCP/IP Clientか。アドレスとポートがlocalhost:9099と一致しているか。ファイアウォールで遮断されていないか |
接続はできるがReceiveDataが発生しない | 両者のパケット分割ルールがSizeBodyで一致しているか。SizeBodyのSize LengthとSize Buffer Endianが両者で同じか |
| 送信してもTesterに届かない | 分割ルールの不一致がないか。送信先が正しく接続済みか |
| PIE終了時にエラーログが出る | EndPlayでCloseを呼んでいるか |
パケットの結合・分断が原因で通信が失敗する仕組みについては、ユースケースのパケット分割ルールを切り替えるを参照してください。
関連チュートリアル
- ユースケース — UDP・WebSocket・共有メモリなど、ほかのプロトコルの使い方
- Blueprint APIリファレンス —
Start・Send・各Protocolノードの入出力 - データ形式と運用 — トラブルシューティングとセキュリティ