Unreal Engine プラグイン
Game-Python Bridge の Unreal Engine プラグイン、「Playable-COMBridge
」について説明します。
利用方法
Playable-COMBridge
プラグインをプロジェクトのPlugins
ディレクトリ以下に配置してください。
その状態で.uproject
を開くとPlayable-COMBridge
のビルドが行われ、当該プロジェクトでプラグインが利用できるようになります。
Playable-COMBridge が依存するプラグイン
Playable-COMBridge
は以下のプラグインに依存しています。
Playable-COMBridge のブループリント関数
Get Connection Param from CommandLine
指定したコマンドライン引数から接続情報を取得します。
この処理は各レベルのレベルブループリントのEventBegeinPlay
で呼ぶことを想定しています。
例えば上記の場合、ビルドしたゲームを
sample.exe -ServerAddress=127.0.0.1 -TCPPort=8080 -Commpress=True
のように起動することで接続先 IP アドレスと TCP ポート番号を指定することが出来るようになります。
インプット
- Server Address Option … サーバーアドレスを格納しているコマンドライン引数 (デフォルト値: ServerAddress)
- Port Number Option … TCP ポート番号を格納しているコマンドライン引数 (デフォルト値: TCPPort)
- Enable Compress Option … ゲーム内情報の圧縮を行うかを決めるコマンドライン引数 (デフォルト値: Compress)
アウトプット
- Server Address … コマンドライン引数から取得したサーバーアドレス
※ 見つからなかった場合は "localhost" となります。 - Port Number … コマンドライン引数から取得した TCP ポート番号
※ 見つからなかった場合は 8000 となります。 - Enable Compress … コマンドライン引数から取得したゲーム内情報の圧縮フラグ
※ 見つからなかった場合は false となります。
Initialize
Playable-COMBridge の初期化及び通信処理の開始を行います。
この処理は各レベルのレベルブループリントの EventBegeinPlay
イベントで呼ぶことを想定しています。
現在、レベルを遷移時にネットワーク接続が維持しないようにしています。制御したい全てのレベルで最初に Initialize
を実行する必要があります。
インプット
- IPAddress … 接続先 IP アドレス (デフォルト値: localhost)
- Port … 使用する TCP ポート (デフォルト値: 8000)
- Wait (Experimental) … 機械学習向けに用意された、Unreal Engine 側が Python の処理を待つ機能のフラグ
- Compress … ゲーム内情報を LZ4 圧縮するか否かのフラグ
Wait
をtrue
にした場合、ゲーム内の情報を Send した際に内部でSet Game Pausedによるポーズ処理が行われ、外部プログラム側からデータが送られてくると同関数でポーズ解除をする仕組みになっています。
ゲームが別途Set Game Paused
を呼び出すと整合が取れなくなりますのでご注意ください。
アウトプット
- Return Value … ユーザー定義のデータを受信するためにつかうための変数です。詳しくはユーザー定義のデータのハンドリング を参照してください。
Send
接続先にゲーム内の情報を送信します。
Python 側の処理のしやすさも考慮し、秒間 15-30 回程度の頻度で送信するのが良いと思います。
インプット
- Json String … Json 形式の文字列(String)です。 BlueprintJson などで作成してください。
Get Gamepad State
ゲームパッドの状態を JSON 文字列として取得します。
インプット
- Player Index … 対象とするプレイヤー番号
アウトプット
- Return Value … 現在のゲームパッドの状態を格納した JSON 文字列
この文字列は外部プログラムから Unreal Engine 側に送信するゲームパッド情報と同一なので、操作のリプレイをしたい場合などに有効です。
COMDK Json Utility のブループリント関数
BlueprintJson プラグインはブループリントで JSON を作成することが出来ますが、煩雑になりやすく沢山のデータを格納しようとすると面倒です。
そこで GPB では、基本的なパラメータの格納を簡潔に記述できるようユーティリティ群を用意しています。
Bool To JSON
bool 値を JSON Object に格納します。
Float To JSON
float 値を JSON Object に格納します。
Integer To JSON
int 値を JSON Object に格納します。
String To JSON
文字列を JSON Object に格納します。
Vector To JSON
Vector を以下のような Json Value に変換します。
"FieldName":{ "X":00.00, "Y":00.00, "Z":00.00 }
Rotator To JSON
Rotator を以下のような Json Value に変換します。
"FieldName":{ "Roll":00.00, "Pitch":00.00, "Yaw":00.00 }
ユーザー定義のデータのハンドリング
ユーザー定義のデータは下記のようにすることで取得可能です。
ユーザー定義データは JSON 形式の 文字列 として取得することが出来ますので、BlueprintJson などを使ってデータを取得するようにしてください。
外部プログラムからデータを送信する方法はこちらを参照してください。