Author Archives: あまじ

下手くそながらソフト制作、絵描き、作曲等にチャレンジしております、 「あまじ」と申します。

Unity+C# 初心者のためのメモ書き

■初心者のための Unity と C# 関係まとめ

初心者(主に自分を指す)のためにUnityとC#、Mono、.NET についてまとめた備忘録的なものです。

 

■Unityでの利用可能言語

Unity は C#、Boo、Javascript等、様々な言語に対応しているようですが、

現在開発はC#で行っています。C#言語は .NET Framework というフレームワークとセットで開発されたプログラミング言語で、Delphi 言語に似ているとのことです。

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

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

C#:テキスト形式で言語を記載する。

.NET Framwork:

C#で書かれたプログラムをコンパイルしてバイナリの中間言語にし、 exe の実行可能形式にする。(.exe形式を実行すると、.NET Framework が中間言語の読み取りおよびNativeコードへの返還、実行を行う。)

 

■.NET Framework互換

.NET Framework は基本的に Windows 環境を意識して作成されています。

MacOS や Android 上でも動作するような.NET Framework にあたる部分が、

オープンソースで作成されています。便利。

Unity では Mono というC# コンパイラを利用しているようです。

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

この備忘録を記述している時には、Unity2017 がすでにリリースされています。

が、現在自分が開発しているソフトはUnity2017の一つ前のバージョンである、Unity 5.6.2(2017年1月リリース)をベースにしています。

いろいろと最適化されており、機能も増えているようなので、開発序盤・中盤くらいであれば、

Unity2017に乗り換えてもよいかと考えています。

 

◎Unity(Monoコンパイラ)と C# のバージョンの際は以下のようです。

・Unity5.6.2 … C#4 & .NET 3.5

・Unity2017 … C#6 & .NET 4.6

 

 

■C# の言語の主な違い(超ざっくりメモ)

使うUnity のバージョンによって利用可能なC# や Mono が持つ機能が異なってきます。

バージョン 主な機能差異(超概要) リリース
1  初回リリース 2002 年
2 ・Generics (総称型)… 例:List<T> のような型Tのチェック記述。

・Nullable Types(Null許容型)…例:Nullable<int> でnull許容int 型を定義。

・Anonymous Methods(匿名メソッド)…名無しのメソッド定義。delegate利用など。

・Iterator Blocks (反復子ブロック)… yeild return で繰り返し値を返すブロック(コルーチン)を定義可能。

2005年
3 ・Implicit Type (暗黙の型) … 例:var test=”文字列” など、推論が可能な型

・Objects Initializers and Collection initializers(オブジェクト初期化子、コレクション初期化子) … インスタンスの new 時に一緒にメンバを初期化するよう記述可能。

・Anonymous types(匿名型) … 匿名クラスの定義が可能。例:var Enemy = new { Name = “Slime”, Hp = 10, Exp = 5 };

・Automatic Properties … アクセサメソッドをget、set記述で表現可能

・Lambda Expressions (ラムダ式) … ラムダ式の記述可能。匿名メソッドを拡張したもの。

・Extension Methods (拡張メソッド) … 既存のクラス(stringとか)にメソッドを追加可能。

・Query Expressions(クエリ式)… SQLライクな文でデータソート・抽出可能。

・Partial (部分クラス) … Partialキーワードを使ってクラスを複数ブロックに分割可能。

2007年
4 ・Dynamic Type (ダイナミック型) … varと似ているが、こちらは実行時にメソッド定義が呼び出されるなど動的(ダイナミック)に解釈される型。

・Optional Parameters(オプション引数) … メソッド呼び出し時に省略可能なパラメータを設定可能。また、省略された時のデフォルト値を定義可能。

・Named Arguments (名前付き引数) … 名前付き変数。Method ( x: 10, z:5, y:23 ) という呼び方が可能で直観的なコード記述が可能。

・Generic Variance(ジェネリック型の分散) … List<int> を List<object>に変換するとき、IEnumerable<int> → <object>に変換可能とする機能。

・Task (非同期Task処理)… Thread 処理をTask管理可能。

2010年
5 ・await, async(非同期処理 ) … 今までのThread処理部分を読みやすく記述可能。
・Caller Info 追加 … ファイル名、メソッド名、行をより簡単に出力可能。
2012年
6 ・Auto-Property Initializers(自動プロパティ初期化子) … メンバ変数のアクセサ記述(get; set;)を行いながら、同時に初期化も可能。例)public int Hitpoint { set; get; } = 100;

・nameof Expression(nameof演算子) … 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 Operators(Null条件演算子) … 「?.」演算子の追加。nullチェックを行い、結果は 「クラス名?」 へ代入される。「クラス名?」は Null許容型(Nullable Types )となる。

・index initializers(インデックス初期化子) … 配列アクセス可能なクラスのインスタンス初期化時に内容の値を初期化設定可能。

・Exception filters(例外フィルタ) … 例外のキャッチに加え、さらにフィルタ条件を指定可能。例:catch (NotFoundChestContainsException e) when (e.Message.Contains(“mimic”)){ 処理 }

・await in catch and finally blocks(Catch、Finally句ないでの await ) … Catch、Finally句内でのawait利用が可能に。

・#Pragma拡張 … Pragma でコンパイラ警告のユーザー定義による抑制が可能。

 

2015年

■参考

以下、非常に参考になったサイト様です。ありがたやありがたや・・。

buildinsider.net「C# 6.0で知っておくべき12の新機能」 … http://www.buildinsider.net/language/csharplang/0600

Microsoft 公式(英語)「What’s New in C# 6」 … https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-6

Wikipedia「C#」 … https://ja.wikipedia.org/wiki/C_Sharp