この解説記事では、Unreal Engine 5.4.2 と WebSocket を用いて、C++ と Python 間で日本語を含むメッセージのやり取りを行うサンプルプロジェクトの最新バージョン v0.2.0 のリリースノートについて解説します。
はじめに
プロジェクトの概要
このプロジェクトは、Unreal Engine 5.4.2 で C++ と Python を WebSocket を使って通信させるサンプルプロジェクトです。ゲーム内でキャラクターが特定のキーを押すと、WebSocket 経由でメッセージがサーバーに送信され、サーバーはメッセージを受信して応答を返します。これにより、ゲームとサーバー間でリアルタイムなデータのやり取りが可能になります。
動作要件
- Unreal Engine 5.4.2
- Python 3.x
- Python の
websockets
ライブラリ
新機能
WebSocketサーバーとlitellmの統合
このバージョンでは、WebSocket サーバーに litellm というライブラリを統合しました。litellm は、OpenAI の Gemini や Google の PaLM などの大規模言語モデル(LLM)と連携できる Python ライブラリです。
from litellm import completion
async def generate_response(message):
response = completion(
model="gemini/gemini-pro",
messages=[{"role": "user", "content": message}]
)
return response
これにより、サーバーはクライアントから受け取ったメッセージを LLM に渡して解釈し、それに応じたテキストを生成してクライアントに返すことが可能になりました。
環境変数によるAPIキーの管理
litellm を使用する際には、APIキーが必要となります。このバージョンでは、APIキーをコード内に直接記述する代わりに、環境変数 GEMINI_API_KEY
を用いて管理する仕組みを導入しました。
from dotenv import load_dotenv
load_dotenv(verbose=True)
# ...
これにより、APIキーをコード内にハードコーディングする必要がなくなり、セキュリティが向上します。
詳細なログ記録
loguru
ライブラリを使用することで、サーバーの操作とクライアントの活動の詳細なログを記録できるようになりました。
from loguru import logger
logger.add("websocket_server.log", rotation="1 MB", retention="7 days")
ログファイルには、クライアントの接続・切断、メッセージの送受信などの情報が記録され、問題発生時のデバッグに役立ちます。
新しい入力アクション「Hello」
キャラクターに新しい入力アクション「Hello」を追加しました。このアクションは、キャラクターが特定のキーを押すと、WebSocket で「こんにちは」というメッセージを送信し、サーバーから応答を受け取ります。
// ...
EnhancedInputComponent->BindAction(HelloAction, ETriggerEvent::Started, this, &AWebSocketTestV2Character::StartHelloServer);
EnhancedInputComponent->BindAction(HelloAction, ETriggerEvent::Completed, this, &AWebSocketTestV2Character::EndHelloServer);
// ...
変更
WebSocketのテストメッセージの更新
WebSocket の初期化メッセージを「---日本語のテスト---」に変更しました。これにより、日本語の表示のテストとWebSocket 接続が正常に確立されているかを確認しやすくなりました。
// ...
const char8_t* MessageUtf8 = u8"---日本語のテスト---";
// ...
バイナリファイルの更新
プロジェクトの第三者キャラクターブループリントのバイナリファイルを更新しました。これにより、ゲームのパフォーマンスと安定性が向上しています。
WebSocketTestV2Characterヘッダーへのメンバ変数の追加
WebSocket 通信で日本語のメッセージを送受信するために、WebSocketTestV2Character.h
に新たなメンバ変数「MessageUtf8」「MessageUtf16」「MessageUtf8Str」「MessageJpTextLocal」を追加しました。
// ...
const char8_t* MessageUtf8;
const wchar_t* MessageUtf16;
FString MessageUtf8Str;
FString MessageJpTextLocal;
// ...
新しいサーバ通知と挨拶機能の追加
キャラクターに新しい機能「NotifyServer」と「HelloServer」を追加しました。
- NotifyServer: 特定のキーを押すと、WebSocket でメッセージを送信し、サーバーに通知します。
- HelloServer: WebSocket で「こんにちは」という日本語のメッセージを送信し、サーバーから応答を受け取ります。
バグ修正
.envファイルを.gitignoreに追加
セキュリティを強化するために、.env
ファイルを.gitignoreに追加し、機密情報が誤ってリポジトリにコミットされるリスクを減らしました。
開発者向け
WebSocketサーバー機能の拡張
WebSocketサーバー機能を拡張し、以下の機能を追加しました。
- UUIDによるクライアント識別: 各クライアントにUUIDを用いて一意の接続IDを割り当て、管理を容易にしました。
- 詳細なログ記録: 接続・切断、メッセージ送受信などの情報をログファイルに記録します。
WebSocketサーバーの進捗表示
tqdm
ライブラリを使用して、サーバー側処理の進捗状況をクライアントにプログレスバーとして表示します。これにより、サーバー側処理が完了するまで、クライアントは処理状況を視覚的に確認することができます。
Known Issues
- 現時点では、litellmの利用にはアカウント登録とAPIキーの取得が必要です。
- サーバーとクライアントが異なるネットワークにある場合、WebSocket接続がうまくいかないことがあります。
まとめ
このリリースノートでは、UE5.4.2 WebSocketの新バージョンv0.2.0の主な変更点について説明しました。litellmの統合や環境変数によるAPIキーの管理など、新しい機能が追加され、さらに使いやすく、安全なプロジェクトになりました。このプロジェクトは、Unreal Engine で WebSocket を使用して日本語のメッセージを送受信し、サーバーとのリアルタイムなやり取りを行うための良い例となります。
コメント