ダーク/ライト切り替え

GO言語サーバーとUnityクライアント(C#)をgRPCで接続テストしてみた【入門レベル】

投稿日2022-04-05

Picture of the logo


目次

目次を読み込み中...

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の中から必要なものをダウンロードして下さい。

gRPCプラグイン

# 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配下にコピーして下さい。

unityプラグイン

# protocの生成コードをコピーする

scriptsディレクトリ配下にgeneratedとでも名付けたディレクトリを作り、先ほどprotocで作成したgrpc.pb.csとgrpcgrpc.pb.csをコピーする

# 呼び出し用スクリプト作成

下記のようなスクリプトを書いて空オブジェクトにアタッチする。サーバーに接続してテスト用の文字列を送信して返事が返ってきたら成功。ただそれだけのスクリプトです。


            

# 実際に接続してみる

go run cmd/main.goと起動してlisten状態になったらunity側を実行します。

# 実行結果

サーバー側にはこのようなログが表示され

サーバーログ

unity側にはこのようなログが返ってくれば、接続は成功です。

unityログ

接続まで出来たら、あとは色々な関数を作って遊んでみて下さい。






関連記事

【Unity】Go言語でDLLをビルドしてUnityからネイティブプラグインとして呼び出す【備忘録】

blog

Unity用ネイティブプラグインをGo言語で作成した時に手こずった部分を個人的備忘録も兼ねてまとめましたので、似たような事を考えている人はご参考までに。

【Unity】MagicOnionサーバを立ち上げて自己証明書でSSL通信してみる

blog

Unity向けgrpcサーバーManicOnionの導入時にSSL化やNGINXの設定に少し手こずったので備忘録も兼ねて手順をまとめておきました。

UNITYで扇形を作ってみた

blog

Unity上で扇形を作る機能が標準ではついてない?ようなので自作してみました。

FirebaseStorageからUnityへファイルを読み込み、Resourcesに保存する

blog

UnityでFIREBASEのStorageサービスから画像ファイルをダウンロードしてシーン上に表示、保存するまでの簡単な手順紹介です。

UNITYからMYSQLデータベースにアクセスする【初心者向け】

blog

UnityからMySQL等のデータベースにアクセスする簡単なサンプルプログラムを紹介します。若干Java Scriptの知識も必要になります。

UnityでFirebase Storeからデータを読み書きする

blog

FirebaseのFireStoreのデータをUnityから読み書きする手順を紹介します。入門レベル。

【Unity X Node.js】クライアント~サーバー間でAES暗号通信してみた

blog

Unityの暗号ライブラリCryptgraphyを使って暗号通信してみたかったので試してみました。

Unityで端末情報、IPアドレスを取得する方法

blog

Unityにて端末固有情報などをC#コードから取得する方法をまとめました。

UnityでTrail Rendererを使ってオブジェクトの軌跡を描画する

blog

今回はUnityでTrail Rendererを使ってオブジェクトの軌跡を描画する方法についてご紹介します。Trail Rendererを使うことで、オブジェクトがどのような軌跡を描いたかを可視化することができます。

【Unity】Json,CSVファイルを相互に変換する方法【備忘録】

blog

個人的備忘録も兼ねてUnityでインスペクタ上でテキストファイルを指定して、そのファイルから結果を取得する方法をいくつか紹介します。


スポンサーリンク

このサイトをシェアする