Nodachisoft Nodachi Sword Icon
  
@あまじ✎ 2017年7月11日に更新

UnityとC#、Monoの対応バージョン、対応機能、機能差分のまとめ

この記事で書いている事

Unity とC#、Mono、.NET についてまとめたものです。Unity 5.6、Unity 2017 について確認しました。

C#の機能差分は把握しておくと、プログラミングするときに下に書いたトラブルで役立つかも。

下は主に私がはまった事項です。

  • 共通ライブラリを事前に用意していて、いざUnityに適用しようとしたとき、C#バージョン依存でコンパイルエラーがでてしまった!C#バージョンで対応した初期化方法や定義方法に結構な差がある。
  • Thread処理を記載するときのC#バージョンでの対応・非対応を確認しておく。ゲームプログラムに限らず、重たい処理を裏でThread処理することはよくあると思いますが、標準で扱えるThread関連のクラスにだいぶ差がある。

Unityでの利用可能言語

Unity は C#、Javascriptのプログラミング言語に対応しています。 C#言語は .NET Framework(ドットネットフレームワークと読みます) というフレームワークとセットでMicrosoft社によって開発されたプログラミング言語で、Delphi 言語に似ています。

ややこしいのは、C# と .NET Framework がともに開発されてきたが、役割はそれぞれ全く異なる点です。

C# と .NET Framework の役割の違い

  • 「C#」はテキスト形式で記載できるプログラミング言語です。
  • 「.NET Framework」はC#で書かれたプログラムをコンパイルしてバイナリの中間言語にし、 拡張子 exe の実行可能形式にする実行環境えす。 exe 形式を実行すると、.NET Framework が中間言語の読み取りおよびNativeコードへの変換して処理実行を行います。

.NET Framework互換とは

.NET Framework は基本的に Windows 環境を意識して作成されています。MacOS や Android 上でも動作するような.NET Framework にあたる部分が、オープンソースで作成されています。便利。Unity では Mono というC# コンパイラを利用しています。

Unity(Mono)とC# バージョンの対応

2017年7月時点で Unity 2017 が最新リリースとなっています。 Unity2017時点の(Monoコンパイラ)と C# のバージョンの依存関係は以下のようです。

  • Unity 5.6.2 は C#4 & .NET 3.5 を利用
  • Unity 2017 は C#6 & .NET 4.6 を利用

C# の各バージョンの主な違い(超ざっくりメモ)

使うUnity のバージョンによって利用可能なC# や Mono が持つ機能が異なってきます。以下はC#のバージョンと言語としての機能進化を自分なりにまとめてみたものです。

バージョン1.0(2002年にリリース)

ちょっとJavaに似ているこの言語は ECMA(国際的なEUの標準化団体)の目的にも掲げられていて、「モダンで、シンプルで、汎用的なオブジェクト指向言語」として規格された。でも、わりとあって当然とされる ASYNC (非同期機能)の標準機能組込やGENERICSについての機能組み込みが遅れており、実際にプログラマが機能実装するときはメンドクサイ各自の実装をする必要があった。

バージョン2.0(2005年にリリース)

以下、バージョン1.0との特に大きな機能差分です。

機能名(英語+日本語) ざっくり機能解説
Generics総称型 List のような型Tのチェック記述が可能になった。
Nullable TypesNull許容型 Nullable でnull許容int 型を定義できるようになった。
Anonymous Methods匿名メソッド 名無しのメソッド定義や、delegate利用などができるようになった。
Iterator Blocks反復子ブロック yeild return で繰り返し値を返すブロック(コルーチン)を定義可能になった。

バージョン3.0(2007年にリリース)

以下、バージョン2.0との特に大きな機能差分です。

機能名(英語+日本語) ざっくり機能解説
Implicit Type暗黙の型 var test=”文字列” など、推論が可能な型を利用可能になった。
Objects Initializers and Collection initializersオブジェクト初期化子&コレクション初期化子 インスタンスの new 時に一緒にインスタンスで定義しているメンバを初期化するような記述が可能になった。
Anonymous Types匿名型 匿名クラスの定義が可能になった。例:var Enemy = new { Name = “ゴブリン”, Hp = 10, Exp = 5 };
Automatic Properties自動実装するプロパティ アクセサメソッドをget、set 記述で表現可能になった。
Lambda Expressionsラムダ式 ラムダ式の記述が可能になった。バージョン2.0 の匿名メソッドを拡張したもの。
Extension Methods拡張メソッド 既存のクラス(stringとか)にメソッドを追加可能になった。
Query Expressionsクエリ式 SQLライクな分でデータソート・抽出可能。
Partial部分クラス Partialキーワードを使ってクラスを複数ブロックに分割可能になった。

バージョン4.0(2010年にリリース)

以下、バージョン3.0との特に大きな機能差分です。

機能名(英語+日本語) ざっくり機能解説
Dynamic Typeダイナミック型 varと似ているが、こちらは実行時にメソッド定義が呼び出されるなど動的(ダイナミック)に解釈される型。
Optional Parametersオプション引数 varと似ているが、こちらは実行時にメソッド定義が呼び出されるなど動的(ダイナミック)に解釈される型。
Named Arguments 名前付き引数 名前付きメソッド呼び出しが可能になった。Method ( x: 10, z:5, y:23 ) という呼び方が可能になって直観的なコード記述が可能。
Generic Varianceジェネリック型の分散  List を Listに変換するとき、IEnumerableに変換可能とする機能。
Task非同期Task処理 Thread 処理をTask管理可能になった。

バージョン5.0(2012年にリリース)

以下、バージョン4.0との特に大きな機能差分です。

機能名(英語+日本語) ざっくり機能解説
await, async非同期処理 今までのThread処理部分を読みやすく記述可能になった。
Caller Info 追加 ファイル名、メソッド名、行をより簡単に出力可能になった。

バージョン6.0(2015年にリリース)

以下、バージョン5.0との特に大きな機能差分です。

機能名(英語+日本語) ざっくり機能解説
Auto-Property Initializers自動プロパティ初期化子 メンバ変数のアクセサ記述(get; set;)を行いながら、同時に初期化も可能。例)public int Hitpoint { set; get; } = 100;
nameof Expressionnameof演算子 Instance名称を文字列で取得可能。例:nameof ( ItemName ) で “ItemName” を取得。
String interpolation文字列補間 例:var message = $”My name is {SyujinouName}”;変数「string SyujinkouName」を埋め込んだ文字列を生成可能。
Expression-bodied function members式形式のメンバ  メソッド本体がラムダ式で一行で記述が可能に。メンバの自動プロパティのget部分もラムダ式で記述可能になった。
Read-only Auto-properties 自動プロパティに readonly キーワード指定が可能になった。
using static Method あるクラスのStaticメソッドを直接 Using 指定し、クラスまでの記述を省略可能に。
Null-conditional OperatorsNull条件演算子 「?.」演算子の追加。nullチェックを行い、結果は 「クラス名?」 へ代入される。「クラス名?」は Null許容型(Nullable Types )となる。
index initializersインデックス初期化子 配列アクセス可能なクラスのインスタンス初期化時に内容の値を初期化設定可能。
Exception filters例外フィルタ 例外のキャッチに加え、さらにフィルタ条件を指定可能。例:catch (NotFoundChestContainsException e) when (e.Message.Contains(“mimic”)){ 処理 }
await in catch and finally blocksCatch、Finally句内での await Catch、Finally句内でのawait利用が可能に。
#Pragma拡張 Pragma でコンパイラ警告のユーザー定義による抑制が可能

非常に参考になったサイトさま

ページの更新履歴

更新日 更新内容
2017.7.11 ページ公開
2018.3.17 スマホからレイアウトが崩れて読みにくいので修正。ついでに文章構造と内容も訂正。
 
 
送信しました!

コメント、ありがとうございます。

なんかエラーでした

ごめんなさい。エラーでうまく送信できませんでした。ご迷惑をおかけします。しばらくおいてから再度送信を試していただくか、以下から DM などでご連絡頂ければと思います。

Twitter:@NodachiSoft_jp
お名前:
 
連絡先:
 
メッセージ:
 
戻る
内容の確認!

以下の内容でコメントを送信します。よろしければ、「送信」を押してください。修正する場合は「戻る」を押してください

お名前:
 
連絡先:
 
メッセージ:
 
Roboto からの操作ではないという確認のため確認キーを入れてください。
確認キー=95
戻る
 / 
送信確認へ
コメント欄
コメント送信確認へ

広告領域
追従 広告領域
目次
UnityとC#、Monoの対応バージョン、対応機能、機能差分のまとめ
UnityとC#、Monoの対応バージョン、対応機能、機能差分のまとめ
この記事で書いている事
この記事で書いている事
Unityでの利用可能言語
Unityでの利用可能言語
C# と .NET Framework の役割の違い
C# と .NET Framework の役割の違い
.NET Framework互換とは
.NET Framework互換とは
Unity(Mono)とC# バージョンの対応
Unity(Mono)とC# バージョンの対応
C# の各バージョンの主な違い(超ざっくりメモ)
C# の各バージョンの主な違い(超ざっくりメモ)
バージョン1.0(2002年にリリース)
バージョン1.0(2002年にリリース)
バージョン2.0(2005年にリリース)
バージョン2.0(2005年にリリース)
バージョン3.0(2007年にリリース)
バージョン3.0(2007年にリリース)
バージョン4.0(2010年にリリース)
バージョン4.0(2010年にリリース)
バージョン5.0(2012年にリリース)
バージョン5.0(2012年にリリース)
バージョン6.0(2015年にリリース)
バージョン6.0(2015年にリリース)
非常に参考になったサイトさま
非常に参考になったサイトさま
ページの更新履歴
ページの更新履歴
Nodachisoft © 2020