概要
- VContainerを導入しようと思いPackageManagerから入れたが動かない
- 結論はAssemblyDefinitionをちゃんと確認しましょうという話
- VContainerを連呼していますが、VContainer様の問題では全くございません。念のため。
- 本当に初心者的な内容ですが、自分を含め将来同じ問題を抱えた方の為に恥をしのんでメモさせていただきます。
前提
- C# や VisualStudio 使い始めたばかりの者が書いて言います。
- 個人で作っているゲームの開発が進むに連れて、依存関係とかテストが書きにくく、開発速度がでてないなと感じる日々でした
- ここは一念発起してVContainerなるものに手をだしてみました。
VContainerはDIを実現するツールとして手頃感もあり導入しました。詳細は以下を読めばよいと思うので割愛します。
ハマったこと
- インストールマニュアルを読みながらPackageManagerからgit経由でVContainerを、現在開発中のプロジェクトにインストール
- さっそくusing VContainerからサンプルを書き始めるとエラー
en
Assets\Scripts\SceneTitle\GameLifetimeScope.cs(3,7):error CS0246:
The type or namespace name'VContainer' could not be found
(are you missing a using directive or an assembly reference?)
ja
エラー CS0246 型または名前空間の名前 'VContainer' が見つかりませんでした
(using ディレクティブまたはアセンブリ参照が指定されていることを確認してください)
- 色々なインストール方法を試したり、importでプロジェクト内に配置してもだめ
- 以前からインストールしていたTextMeshPRO関連は問題なく動作している
- 試しに全Packageをクリアして全ていれなおしても、gitインストールのVContainerだけがエラー
- VContainerあきらめてZenjectをインストールしても同様のエラー
- UnityのVersionをあげてみたが変わらず。
- 試しに別のUnityProjectを作成してインストールしたらVContainerが動作した
- いろいろやるも数日間どはまり
解決
- 動作したプロジェクトと、動作しなかったプロジェクトの差異を確認していてasmdefの設定があったことを思い出す。
- 最初につくった時に「ふーん」くらいしか思ってなかった。
- この参照がTextMeshPROしか入っていなかった。ここにVContainerを入れたところ、参照が通るようになった。
所管
- これパッケージを入れる度に更新するものなのかはわかりませんが、そんな手順をあまり見かけないような気がしています。(違ったらごめんなさい)
- 実は少し前にプロジェクト名をUnityの設定でリネームした(つもりになっていた)が、旧プロジェクト名がいたるところにでてくる問題にこまっておりました。
- 具体的にはUnityが参照するslnファイル名が、旧プロジェクト名になっており、slnをRegenerateしても旧プロジェクト名.slnが作成されてしまう
- 結果UnityでScriptをクリックして開けるVisualStudioのプロジェクト名が、旧プロジェクトになっていました
- プロジェクト名はasmdef内のNameという属性で設定するっぽい。こちらを設定することで変更することができました。
- プロジェクト名関連でファイルや設定をいじった結果、asmdefの更新がされなくなった?のか?とか想像しています。はて。