OmniGRPC セットアップとアセット生成

このページでは、OmniGRPCをプロジェクトへ追加し、Blueprintで通信するためのアセットを用意する手順を説明します。.protoの取り込みは両エディションで共通です。Server Reflectionからの取り込みはFull Editionで使用できます。

プラグインを導入する

  1. Epic Games Launcherから、使用するUnreal Engineバージョンに対応したOmniGRPCを対象のEngineまたはプロジェクトへインストールします。
  2. Unreal Editorを起動し、Edit → Plugins → Networking → OmniGRPCを有効にします。
  3. Editorの再起動を求められた場合は再起動します。

プラグインには通信に必要なライブラリが含まれています。追加のソフトウェアやC++ライブラリのビルドは不要です。

Free EditionからFull Editionへ移行するときは、Editorを終了してプラグインを置き換えます。両者は同じプラグイン名を使用するため、同時には有効化しないでください。

Windows、Linux、macOS、Android、iOSのすべてで同じ.protoとBlueprintを利用できるのはFull Editionです。プラットフォームごとに通信処理を書き直す必要はありません。Free Editionの対応プラットフォームはWindows(Win64)のみです。

Unreal EditorでOmniGRPCプラグインを有効にする画面

.protoからBlueprint用アセットを生成する

Content Browserへ.protoファイルをドラッグ&ドロップします。取り込み後、既定の出力先/Game/OmniGrpcGenerated/に次のアセットが生成されたことを確認してください。ImporterのOutput Folderが生成先のルートです。

.proto内の定義作られるアセットBlueprintでの役割
messageUser Defined Structサーバーへ送るデータ、サーバーから届くデータ
enumUser Defined Enum複数の選択肢から値を選ぶ項目
serviceOmniGrpc Service Asset呼び出せるサーバー機能の一覧
/Game/OmniGrpcGenerated/
├── Messages/
├── Enums/
└── Services/

生成されるStruct名は.protoのメッセージ名と同じです。たとえばLoginRequestからはMessages/LoginRequestが生成され、F接頭辞は付きません。

    flowchart TD
	  Proto[.protoファイル] --> Import[Content Browserへインポート]
	  Import --> Message[message → MessagesのStruct]
	  Import --> Enum[enum → EnumsのEnum]
	  Import --> Service[service → ServicesのService Asset]
	  Message --> Request[MakeノードでRequestを作成]
	  Service --> Select[CallノードのServiceを設定]
	  Select --> Method[DetailsのMethod Nameを選択]
	  Method --> Typed[RequestとResponseの型が決まる]
	  Request --> Typed
protoファイルをインポートして生成されたOmniGRPCアセット

別の.protoを参照している場合

取り込む.protoが別の.protoを参照している場合は、元のフォルダー構成を保ったまま用意してください。参照先のファイルが見つからないとImportに失敗します。失敗した場合はUnreal EditorのOutput Logに原因が出力されます。

Free EditionでStreamingメソッドを含む.protoを取り込んだ場合

Free Editionでも、Server StreamingなどのStreaming RPCを含む.protoの取り込みとアセット生成は成功します。ただし、取り込んだStreaming RPCを呼び出すノードはFull Editionでだけ使用できます。Service Assetの説明とUnreal Editorのログに、Full Editionが必要である旨が表示されます。

Server Reflectionからアセットを生成する

Full Edition のみ

サーバーがServer Reflectionという機能に対応している場合は、手元に.protoファイルがなくても通信に必要な情報をサーバーから取得できます。この機能はFull Editionでだけ使用できます。

  1. Content Browserの空白部分を右クリックします。
  2. Import from gRPC Reflectionを選びます。
  3. 接続先のHostとPort、Security、Service名、Output Folder、Timeoutを入力します。
  4. Importを押します。

Service名には、acme.user.UserServiceのようにpackage名を含む正式な名前を入力します。Service名が不明な場合は、サーバー管理者へ確認してください。サーバー側でReflectionが無効になっている場合や、接続設定が正しくない場合はImportできません。

画像準備中:Import from gRPC Reflectionダイアログ

画像差し替えマーカー

Content Browserの右クリックメニューと、Host/Port/Security/Service/Output Folder/Timeoutを入力したダイアログを見せる。

推奨ファイル名
images/OmniGRPC/setup-reflection-import.png
代替テキスト
gRPC Server ReflectionからService Assetを生成する設定画面

Service Assetを確認する

Service Assetには、そのサーバーで呼び出せる機能(Method)の一覧が保存されます。各Methodを開くと、送るStruct、受け取るStruct、通信方法を確認できます。通常のBlueprint作業では、その他の内部情報を変更する必要はありません。

画像準備中:UserServiceのService Asset

画像差し替えマーカー

最新mainで生成したUserService Assetを開き、Login、WatchUsers、UploadUsers、UserLookupのMethod種別とRequest/Response Struct参照を撮影する。LoginRequest/LoginResponseにF接頭辞が付かないことが読める画面。既存のsetup-service-asset.pngは旧命名のため差し替える。

推奨ファイル名
images/OmniGRPC/setup-service-asset-current.png
代替テキスト
OmniGRPCのService Assetに表示されたgRPCメソッド一覧

CallノードでServiceとMethodを選ぶ

  1. 通信方法に合うCallノードを追加し、ServiceピンにService Assetを設定します。
  2. ノードを選択し、DetailsパネルのgRPC → Method Nameを開きます。
  3. 呼び出すMethodを選び、Request/Responseの型を確認します。
CallノードUserServiceで選べるMethod
Call gRPC UnaryLogin、GetUser、ListUsers、RetryTest、EchoMetadata
Call gRPC Server StreamingWatchUsers(Full Edition)
Call gRPC Client StreamingUploadUsers(Full Edition)
Call gRPC Bidi StreamingUserLookup(Full Edition)

Method名を文字列ピンへ入力する操作は不要です。候補はノードの通信方法で絞り込まれます。Serviceを変えたら、Methodも選び直してください。

Serviceを変数から渡す場合

同じBlueprintのメンバー変数にService Assetを初期値として設定し、CompileしてからGetノードを接続します。編集時にアセットを特定できるため、Methodの候補と送受信の型を解決できます。

実行時にだけ代入される変数やローカル変数では、編集時にServiceを特定できません。候補が空の場合は、まずServiceピンへアセットを直接設定して確認してください。

スキーマを更新する

元の.protoが変更されたら、生成済みService Assetを右クリックし、Regenerate from .protoを実行します。Struct、Enum、Service Assetが新しい内容に更新されます。

再生成後は、変更されたStructやService Assetを使っているBlueprintを開き、Compileを実行してください。データ項目やMethod名が削除・変更された場合は、ノードの接続が外れることがあります。エラーがないことと、入力値が意図せず初期値へ戻っていないことを確認します。

Reflectionから生成したアセットを更新する場合は、同じService名を指定してReflection Importを再実行します。

次のステップ

サンプルサーバーのパッケージに同梱されたuser_service.protoを使い、クイックスタートで基本的なUnary RPCを実行します。