Unityで追加したスクリプトをVisual Studioで開くと補完とか効いてない場合の回避策

いつからかはもう覚えてないけど、前からちょいちょい補完が効かない事があって煩わしかったんだけど、Game A Weekみたいな感じでゲームを作った記録 | kanonjiのブログの時に、原因というか、どうすれば症状が再現出来るかに気が付きました。

症状の再現

  1. UnityでC#ファイルを追加
  2. Project ViewでそのファイルをダブルクリックしてVisual Studioで開く
  3. Miscellaneous Files扱いとなり、補完が効かなくなる

この手順で開くと、なぜか補完が効きません。

Miscellaneous Files on VS

Miscellaneous Filesという扱いになってるらしく、どうやらVisual Studioからみてソリューション外のファイルとして扱われてしまっている様です。
Visual Studioを再起動するか、Solution ExplorerにMiscellaneous Filesを表示する設定にして、ソリューション内に再配置すると、ちゃんとファイルを認識して、補完が効くようになります。
検索しても同じ事例が全然見つからなかったので、もしかしたらなにかしらの環境依存かもしれないけど、少なくとも手元の2つのPCでは再現します。

回避策

File Modification Detected

検索だと解決策どころか同じ事例で困ってるって話すら見かけないので、ダメ元でSlackを使ったUnityのコミュニティで質問してみました。

  1. UnityでC#ファイルを追加
  2. タスクバーかAlt+TabなどでVisual Studioをアクティブにする
  3. File Modification Detectedダイアログが表示され、リロードするとソリューション内に追加したC#ファイルが入っている
  4. 以後Visual StudioからでもUnityからでも、そのファイルを開いたときは補完が効く

ファイルをダブルクリックで開かずにVisual Studioをアクティブにすると良いと教えてもらい、実際に上記の手順で回避出来ました。
割と毎回Visual Studioを再起動するか、補完なしで我慢したりしてたので、ほんと助かりました。
ここに書いてもあれだけど、ありがとうございます。

SlackにUnityのコミュニティを作成しました – Qiita

ちなみに、そのUnityのコミュニティについては、ここを見てください。

予想

なぜこんな症状が発生するかについて少し考えてみました。
おそらくはVisual Studioが外部からソリューション内に作られたC#ファイルを認識するフローの前に、UnityからVisual Studioに、このファイルを開いてという形で、ファイルの存在だけ通知されてしまい、ソリューション内のファイルと断定できないまま、ファイルの存在だけ認識してしまう、みたいな感じじゃないかと思います。

回避策は教えてもらったけど、出来れば元から解決してほしいなぁ。
どのくらいの人が同じ症状出てるか分からないけど、少なくとも自分だけの症状ではなかったから、少しは居るはずだと思うし。

環境

環境 バージョン
Unity 5.5.0f3
Visual Studio Community 2015 14.0.25431.01 Update 3

書いた日

2016年12月20日頃

Unityで追加したスクリプトをVisual Studioで開くと補完とか効いてない場合の回避策」への4件のフィードバック

  1. ユウ

    ずっと前から同じ症状で悩んでいたものです。
    解決策あったんですね!助かりました、ありがとうございます。

  2. kanonji 投稿作成者

    コメントどもです。
    自分も人から教えてもらっただけですが、同じ症状が出てる方が少しはいるはずと書いてみて良かったです。

  3. onionmk2

    この問題に困っていたので、共有いただきとても助かりました。

  4. kanonji 投稿作成者

    コメントどもです。お役に立ったようで良かったです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>