Closed28

Unity AndroidでSignalRを導入してソケット通信する

にー兄さんにー兄さん

前回CosmosDB+SignalR+Azure Functionsでサーバーレスなリアルタイム通信バックエンドシステムを構築した
今回はそれをUnityで使いたい

にー兄さんにー兄さん

やはりnuget-cliを使ってNuGetパッケージをダウンロードして、

nuget install Microsoft.AspNetCore.SignalR.Client

をやっていく
ここでフォルダをちゃんと切り替えておくこと

自分はUnityのルートに./Externalの中に展開した

にー兄さんにー兄さん

じんぐるさんの言うとおりに、
とりあえずdll入れてみて、足りなかったら追加して、を繰り返した結果
こんな感じに

dllは全部パッケージ名/netstandard2.0のものを使用

にー兄さんにー兄さん

一応signalrの接続確立はできた
しかしなぜかデータを受け取れない......もしかして構造化されたデータは無理だったり......?

にー兄さんにー兄さん

やはり構造化しないで配列で渡してOn<float, float, float>("message", (x,y,z)=>{/*something*/})の形式で受け取ると無事通リが来た

にー兄さんにー兄さん

今更だけどテスト環境を明記する
色々事情があってプロジェクトを開発しながらなのでちょっとだけ特殊

  • Unity 2020.3.20
  • Immersal SDK 1.15.0
  • Windows 10 Home
  • Pixel 4a 5G Android 12

UnityプロジェクトはImmersal SDK Samplesをもとに作成している
Immersalを使ったアプリ開発をしようと思っていたので

にー兄さんにー兄さん

んービルドしてみたら
System.FormatException: one of the identified items was in an invalid format at ~~~が出てきた

にー兄さんにー兄さん

これがAndroidのせいなのかImmersalSDKのせいなのかわからないな
いったんIL2CPPにして見ます

にー兄さんにー兄さん

IL2CPPにしたらビルド時点で詰まった
載っていたCodeStripping対策もしたがうまくいかない

にー兄さんにー兄さん

dllをAssets/ルートに移動したが意味はなかった
バージョン下げてみようかな

にー兄さんにー兄さん

今のバージョンは6.0.1で、なんと4日前にリリースされたものらしい
記事にあった5.0.x系で試してみたい
一番DL数が多い5.0.12でやってみる

にー兄さんにー兄さん

ちなみに5.0.12は全然DL多くなかった()
試したものの、やっぱり同じ感じになってしまった

にー兄さんにー兄さん

======

問題の切り分けをしたかったので
まずは空のシンプルなUnityプロジェクトの中に
SignalRパッケージを入れてAndroidビルドで試してみることになった

にー兄さんにー兄さん

まずはエディタ。普通に動く
そしてMonoビルド→前回と同じエラーが出る

にー兄さんにー兄さん

arcore(ARFoundation)+URPの環境でも正常に動作
ってことはやっぱりImmersal SDKと相性が悪かったのかな

にー兄さんにー兄さん

一旦最新のv6.0.1で試したい感じがする
全部のlibがnetstandard2.0に対応していたし

そのあとImmersal-Server-Localizer導入してみるか......

にー兄さんにー兄さん

6.0.1にしたら実機でエラーが発生した
変なエラーなので検索せずに色々やっていたら

今度はビルド時にエラーでビルドできなかった
でもこれImmersalのときも見たやつ
Linker.exeみたいなやつがエラー吐いて止まるやつ

Monoのときは出ないけど、IL2CPPにしたら出てきた

にー兄さんにー兄さん

でもこれ、途中まではIL2CPPビルドできたので変だ
いったんIlbraryとかLogとかBuildとか消してみる

再起動と化しても駄目だった
なんだろうな

にー兄さんにー兄さん

ん-やはりこれが出るな......

ただ、IL2CPPビルド自体は通ったので
元々作っていたImmersalのほうでもLibraryとか消して試してみようかな

にー兄さんにー兄さん

HubConnectionBuilderのところで起きてるっぽい
なんとなく、最後のBuild()でDI聞いてる感じがしたんで、そこかなぁ

にー兄さんにー兄さん

ああああ元のプロジェクトで動いたああああ
ということで現状おさらい

  • SIgnalR CLientは5.0.xを使え
  • IL2CPPでInternetAccessはrequireに
  • もしIL2CPPでIlnker.exeのエラーが出たらLibraryLog、obj、buildフォルダを消してやり直せ
このスクラップは2021/12/24にクローズされました