Visual Studio 2017 + ReSharper で Unity (C#) のスクリプトを書こうとして引っかかったこと ( namespace 編)
はじめに
普段 Unity のスクリプトを書くときは JetBrains Rider を使っているのですが、
Visual Studio + ReSharper だと IL Viewer があるし便利やな~、と思ったので、そちらも試してみることにしました。
ら、いくつか不便なところがあったのでメモっておくことにします。
課題
今回引っかかって直したかったのは以下です。
- VisualStudio からクラスを追加すると namespace が Assets.Scripts のように設定されてしまう
( Assets/Scripts より下の階層だけを namespace として扱いたい) - namespace から Assets.Scripts を削除すると、 ReSharper が Warning を出す
- ソリューションエクスプローラーからプロジェクトのプロパティが開かない
特定の namespace を無視する
実は解決したとは言い難いのですが。。。
VisualStudio の 追加 > クラス からクラスを追加すると、下記のようなファイルが追加されます。
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Assets.Scripts { class Class1 { } }
問題は「namespace Assets.Scripts」の部分で、 Assets/Scripts より下にある階層だけを namespace として扱いたい訳です。
が、その設定がわからずorz
後述しますが、プロジェクトのプロパティを開いて、「既定の名前空間」を確認しても空になっていました。
対処法
で、どうしたかというと、 追加 > クラス からクラスを追加するときに、
クラス ではなく CSharp MonoBehaviour を追加するようにしました。
そうすると、UnityEditor からファイルを追加したときと同じように namespace 無しの状態でクラスが作成されます。
その状態から namespace を必要に応じて追加するか、
もしくはあきらめて Assets.Scripts を削除する(白目)
ま、まぁそんなにクラスを追加しまくらないですよね?ね?
Rider では普通の C# クラスを追加しても Assets.Scripts を含まない namespace が挿入されるので、
もう少しちゃんとした解決方法が見つかったら追記します。
warning を止める
ReSharper をインストールしている場合、手動で namespace を変更したとしても「namespace Assets.Scripts になってませんよ?」と警告が出されます。
これを防ぐためには、ソリューションエクスプローラー上で Assets 、 Scripts のフォルダを選択し、 プロパティの ReSharper > Namespace Provider を False に変更します。
これで例えば Assets/Scripts/Sample というフォルダ構成だった場合、
namespace Sample としてくれます。
プロジェクトのプロパティを開く
UnityEditor から生成した .sln ファイルを Visual Studio 2017 で開くと、
なぜかソリューションエクスプローラー上のプロジェクト名で右クリック > プロパティを選択してもプロパティ画面が開きません。
なんぞこれ?としばらくググっていたのですが、どうもプラグインとして入れている Tools for Unity が原因のようです。
プロパティ画面を開くことができるようにするには、 ツール > オプション > Tools for Unity > 全般 > その他 で、
プロジェクト プロパティへのアクセス という項目があり、これを True に変更して Visual Studio を再起動すると無事開くことができるようになりました。
おそらく下手にいじると Unity 側で問題が起きる、ということなのかもしれませんが、
せめてメッセージぐらい出してくれても。。。(見落としてるだけかもですが)
おわりに
Unity のスクリプトを書くときは、 やはり Rider が使いやすいなぁとは思うのですが、
C# を書くという点では、 Visual Studio や ReSharper の方が歴史も長く、使いやすい場合もあります。
両方をうまく使いこなしてバリバリコードを書いていきたいところですね( *´艸`)