UnityでgRPCをする場合、Magic Onionを使うのがお手軽ですが、今回はGO言語でサーバーを構築してみたかったので最低限の接続機能を自作してみました。備忘録を兼ね書き残しておきます。
# テスト環境
実際にテストに使用した環境を紹介します。このバージョンでないと動かないという訳ではありません。
# サーバー側
- ・ localhost(windows10)
- ・ go version go1.18
# クライアント側
- ・ windows10
- ・ Unity 2020.3.26f1
- ・ gRPC_UNITYパッケージ 2.46
# サーバー側構築
GO言語をすでにインストール済みであるものとします。
# ディレクトリ構造
# .protoファイルの作成
上記のような最低限の内容でgrpc.protoというファイルを作りprotoディレクトリに保存する。(ファイルやディレクトリ名は任意です) 文字列を何か送って何か文字列を返す、ただそれだけの関数です。
# .protoファイルのコンパイル
.protoファイルが出来たら、go言語用(サーバー用)とc#用(unityクライアント用)それぞれにコンパイルする必要があります。コンパイルにはprotocというコマンドを使います。
# プラグインのインストール
コンパイルには各プログラム言語に対応したプラグインが必要なので先にダウンロードする。各言語のプラグインは自分でインストールしないといけないようです。
- ・ [go言語](https://grpc.io/docs/languages/go/quickstart/#prerequisites) こちらのサイトを参考に```go install ~```コマンドでインストールして下さい。
- ・ [go言語以外の言語](https://packages.grpc.io/) こちらのサイトからダウンロード出来ます。build idのリンクをクリックして表示されたサイトのPluginsの中から必要なものをダウンロードして下さい。
# go用
.protoファイルと同じディレクトリで下記コマンドを実行すると、ファイルが2つできるので、それをpbディレクトリに移動します。
# c#用
上記サイトでプラグインをダウンロードする。 .tar.gz形式で圧縮されているので各自のOSの方法で解凍して下さい。 解凍するとgrpc_cpp_pluginのような名前のファイルが7つくらい出来るのでprotocが使用するディレクトリにコピーする。(linuxの場合は/usr/local/bin/等)
出力された2つのファイルは後でunityプロジェクトの中にコピーします。
# サーバー用プログラムを作成する
作成したcmdディレクトリにmain.goとでも名付けて立ち上げ用プログラムを作ります。今回サービス部分はファイルを分けてimportするようにしています。
pkg/serviceというディレクトリを作成し、その中にサービスの中身になるプログラムを書きます。今回は開通テストなので非常にシンプルなものです。
# Unityクライアント側
# gRPCモジュールをUnityプロジェクトにコピーする
前述のgRPCモジュールサイトのbuild idリンクをクリックして表示されたサイトの中からc# grpc_unity_packageのzipファイルをダウンロードして解凍して下さい。中にpluginsというディレクトリがあるので、そのディレクトリごとunityプロジェクトのAssets配下にコピーして下さい。
# protocの生成コードをコピーする
scriptsディレクトリ配下にgeneratedとでも名付けたディレクトリを作り、先ほどprotocで作成したgrpc.pb.csとgrpcgrpc.pb.csをコピーする
# 呼び出し用スクリプト作成
下記のようなスクリプトを書いて空オブジェクトにアタッチする。サーバーに接続してテスト用の文字列を送信して返事が返ってきたら成功。ただそれだけのスクリプトです。
# 実際に接続してみる
go run cmd/main.go
と起動してlisten状態になったらunity側を実行します。
# 実行結果
サーバー側にはこのようなログが表示され
unity側にはこのようなログが返ってくれば、接続は成功です。
接続まで出来たら、あとは色々な関数を作って遊んでみて下さい。