(この記事の使用環境: Unity 2018.1.0b9 Personal、Visual Studio Community 2017, Windows10)

Unity2018.1.0b9から.NET4.x相当がStable(安定)になった

ということのようです。
Unityエディターを開いて、Edit > Project Settings > Player からインスペクターで下図の箇所を変更すれば準備OKです。.NET4.x 相当Stable (安定) になっていますね。やったぜ。
png
※ しばらく前のバージョンから .NET4.6 相当に切り替えることはできたのですが、それは Experimental (実験的) 扱いでした。ようやくこのバージョンから安定扱いになって、逆にこれまでStableだった .NET3.5 相当が Legacy (遺物) 扱いに変わりました。(とはいってもこの記事執筆時点ではUnity2018.1.0がまだベータ版なのですが)

ねんがんの C#6を てにいれたぞ!

ということで、遠慮なくC#6での新記法を使えますね。

新記法についてはこちらの記事を参考にさせてもらいましょう。いつも大変お世話になっております。

Unityでの使いどころの一例

個人的には以下のものをよく使っているので、一例としてご紹介。

null 条件演算子

対象のComponentがあるときだけ処理を行うときに。いちいち if (Hoge != null) という文を書かなくても済む。(ただし、if 文の else にあたる処理は書けないので、nullのときに別の処理をさせたい場合は使えない、と思う)

GetComponent<PlayerMove> ()?.SpeedDown ();

nameof 演算子

Invoke, InvokeRepeatingなど引数に関数名を文字列で渡す必要があるとき、nameof を使うことで誤入力や後からの関数名変更等に対して安全になる。

InvokeRepeating ( nameof ( NextWave ), waveSpan, waveSpan );

expression-bodied な関数メンバー

ひとつの式だけからなる関数の定義に使えば、コード行数が減って全体を見通しやすくなる。

void UpdateHightScore () => highScoreText.text = "High Score: " + highScore;

using static

クラス名.変数名、クラス名.メソッド名 と書かずに変数名、メソッド名だけで使えるようになることで、コード内の文字数が減って読みやすくなる。
using static UnityEngine.LayerMask;     // using static でクラス名を指定しておく

...

    Physics.IgnoreLayerCollision ( NameToLayer ( layer1 ), NameToLayer ( layer2 ), true );
// LayerMask.NameToLayer のように書かずに済むため、このように別のメソッドの引数内にメソッドを書いても読みやすい

ほかにも C#6 には便利な記法がありますが、ひとまずこんなところで。

C#7.x~には対応されるの?

現状ではC#7.xの記法には対応していないようですが、対応に向けてUnityの中の人たちががんばっているような雰囲気です。

Unityフォーラムでのやりとり
https://forum.unity.com/threads/future-plans-for-the-mono-runtime-upgrade.464327/page-3#post-3242189

C#7.x で書けるようになるとさらにコードがすっきりしそうなので、楽しみに待ちたいと思います。がんばえー。


今回は以上です。