🎍

Unity で gRPC するまで

2021/01/26に公開

はじめに

こんにちは、bamboooo の住江です
bamboooo として新たにゲーム開発を始めて、サーバサイドは Golang、クライアントは Unity で C# と型のある言語を採用したので、せっかくだから通信を gRPC により行うことにしました
今回は Unity で gRPC 通信を行うまでのチュートリアルを記します

gRPC C# now has experimental support for Unity. Please try using gRPC with Unity and provide feedback!

とのことなので人柱になります

TL;DR

実行環境

  • Mac OSX Catalina 10.15.7
  • Unity Hub 2.4.2
  • Unity 2019.4.16f1

C# で gRPC 通信を行う

Unity で gRPC 通信を試してみる前に
gRPC 公式の Quick Start に従います

.NET SDK のインストール

C# で gRPC を使用するには .NET Core をインストールする必要があります
https://dotnet.microsoft.com/download からインストールしましょう

$ dotnet --version
5.0.102

grpc 公式リポジトリのクローン

https://github.com/grpc/grpc.git に example が提供されています
今回はこれを実行することを目的とします
Quick Start では version 1.34.1 を使用していますが、最新の master で試しています

$ git clone https://github.com/grpc/grpc.git
$ cd grpc

ソリューション(プロジェクト的なもの)をビルドします

$ dotnet build examples/csharp/Helloworld/Greeter.sln

ビルドが成功したら、gRPC はサーバーとクライアントで通信するのでそれぞれ立ち上げます

  • あるターミナルでサーバーを立ち上げる
$ cd examples/csharp/Helloworld/GreeterServer
$ dotnet run -f netcoreapp2.1
Greeter server listening on port 30051
Press any key to stop the server...
  • 別のターミナルでクライアントから通信を行う
$ cd examples/csharp/Helloworld/GreeterClient
$ dotnet run -f netcoreapp2.1
Greeting: Hello you
Press any key to exit...

と表示されれば成功です!

Unity で gRPC 通信を行う

本題です
gRPC を行う Unity プロジェクトが同じリポジトリに提供されているのでそれを利用します
https://github.com/grpc/grpc/tree/master/examples/csharp/HelloworldUnity です
これの BUILD を試していきます
PREREQUISTES に「Unity 2018.3.5f1」と書かれていますが、プロジェクトをアップデートすれば「2019.4.16f1」で動きました

Unity で gRPC を利用するプラグインのインストール

https://github.com/grpc/grpc/tree/master/src/csharp/experimental#unity に従います

1 Create a Unity project that targets .NET 4.x Equivalent (Edit -> Project Settings -> Player -> Configuration -> Scripting Runtime Version). gRPC uses APIs that are only available in .NET4.5+ so this is a requirement.

の設定が 2019.4 バージョンでは見当たらず、デフォルトの設定のまま利用しています

2 Download the latest development build of grpc_unity_package.VERSION.zip from daily builds

daily builds から Daily Builds of master Branch の最新の Build ID をクリックします

C# の欄から grpc_unity_package.VERSION.zip をダウンロードします

3 Extract the .zip file in the Assets directory in your Unity project

それを Unity プロジェクトの Assets/ 以下に展開します

Plugins が展開したパッケージです

Unity IDE will pick up all the bundled files and add them to project automatically. You should be able to use gRPC and Protobuf in your scripts from now on.

で勝手に読み込まれて gRPC を利用できるのですが、Unity の「▶」ボタンを押してビルドして

の「Hello gRPC!!」ボタンを押すと、
「〜は、開発元を検証できないため開けません。」のようなメッセージが表示されることがあります
「〜は、開発元を検証できないため開けません。」と表示されて困ったときの備忘録。
をもとに解消し、再度「▶」ボタンを押してビルドしてみます

の「Hello gRPC!!」ボタンを押し、

と変われば成功です!

おわりに

ここまでで公式のチュートリアルは完了です
同ホストの別プロセスと通信したり、実際に別のサーバーをと通信するのを試すのはまだなので今後試していこうと思います
Unity のクライアント開発のエントリはよくあるのですが、gRPC を利用してサーバーサイドの連携に関して書かれた記事があまり見つからないのでこれから書いていこうと思います

参考

https://grpc.io/docs/languages/csharp/quickstart/
https://qiita.com/nakaken0629/items/faf355db576542c2712c
https://qiita.com/nakaken0629/items/2cda78997befb71f7e3d
https://github.com/grpc/grpc.git

Discussion