若き研究者のアメリカ/ヨーロッパ

技術寄りの事かポエムを書く。アメリカ/欧州メインで留学を目指しています。

UnityでNuGetパッケージのインストールをしてもCannot resolve symbolsになる時

だいぶ初歩的なところですが普通に詰まってました.
敗因:Unityのビルドの仕組みがあまり分かってなかった.

状況としては,Unityプロジェクトでオブジェクトの属性としてC#のプログラムをつけてプログラムをいじってた時.Unity+Riderで開発していたのですが,Rider上のNuGetでパッケージをインストールしてもパッケージがResolveされない問題が起こりました(下図参照)

NetMQパッケージをインストールしたはずなのにresolveされてない??

原因としては単純で,Unity Editorでビルドする時にはRiderの設定で指定してるパッケージディレクトリのパッケージは読まれない(考えてみれば当然.UnityもRiderも初心者だから問題の細分化がしずらく手間取ってしまった) UnityでC#をいじる時にRiderを読み出しても,あくまでRiderのエディタ部分のみ使うということです.ビルドツールとしては考えない.

なので,解決策としてはUnity用のパッケージマネージャ(NuGetForUnity)を入れてそこからパッケージをインストールする.

NetMQ,Riderでインストールしたはずなのに入ってない扱いになってる

上手くいくとPackage以下にパッケージが入っているはず

Rider上でもPackage solvedになっている

Assets/Package以下にdllが入ってる

<感想>
Unityのどのディレクトリにどういうファイルが入るか,ビルドした時にどう動くかなど,もっと知りたい(入門書読んでもXYZ軸がどうとか大したこと書いてないのが多い...困ってる).

<余談>
自分が一番最初に想像してたイメージとしては,以下の図の下2つのような感じ.Unity EditorからRider読み出してるから,良しなにパッケージ管理のパスもUnityのビルド用に変更してくれてたりとか,C#のビルドまではRiderの方でやってたりとかするのかなと思ってた. 上の正解のイメージ(NuGetで入れたパッケージのパスをUnityビルド時には参照してない)なのかなと思った後も,NuGet公式にはサードパーティ製のNuGetForUnityの情報など載ってないので,NuGetで入れたパッケージからdllを取り出してUnityプロジェクトの色んなディレクトリに入れてみたりしていた(Unityのビルド時にリンクしてくれるディレクトリを探したりしてた).

上が正解のイメージ.下2つが想像してたイメージ.