vaguely

和歌山に戻りました。ふらふらと色々なものに手を出す毎日。

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 を追加するようにしました。

f:id:mslGt:20171115155026j:plain

そうすると、UnityEditor からファイルを追加したときと同じように namespace 無しの状態でクラスが作成されます。

その状態から namespace を必要に応じて追加するか、
もしくはあきらめて Assets.Scripts を削除する(白目)

ま、まぁそんなにクラスを追加しまくらないですよね?ね?

Rider では普通の C# クラスを追加しても Assets.Scripts を含まない namespace が挿入されるので、
もう少しちゃんとした解決方法が見つかったら追記します。

warning を止める

ReSharper をインストールしている場合、手動で namespace を変更したとしても「namespace Assets.Scripts になってませんよ?」と警告が出されます。

これを防ぐためには、ソリューションエクスプローラー上で Assets 、 Scripts のフォルダを選択し、 プロパティの ReSharper > Namespace Provider を False に変更します。

f:id:mslGt:20171115155105j:plain

これで例えば Assets/Scripts/Sample というフォルダ構成だった場合、
namespace Sample としてくれます。

プロジェクトのプロパティを開く

UnityEditor から生成した .sln ファイルを Visual Studio 2017 で開くと、
なぜかソリューションエクスプローラー上のプロジェクト名で右クリック > プロパティを選択してもプロパティ画面が開きません。

なんぞこれ?としばらくググっていたのですが、どうもプラグインとして入れている Tools for Unity が原因のようです。

プロパティ画面を開くことができるようにするには、 ツール > オプション > Tools for Unity > 全般 > その他 で、
プロジェクト プロパティへのアクセス という項目があり、これを True に変更して Visual Studio を再起動すると無事開くことができるようになりました。

f:id:mslGt:20171115155132j:plain

おそらく下手にいじると Unity 側で問題が起きる、ということなのかもしれませんが、
せめてメッセージぐらい出してくれても。。。(見落としてるだけかもですが)

おわりに

Unity のスクリプトを書くときは、 やはり Rider が使いやすいなぁとは思うのですが、
C# を書くという点では、 Visual StudioReSharper の方が歴史も長く、使いやすい場合もあります。

両方をうまく使いこなしてバリバリコードを書いていきたいところですね( *´艸`)

参照