はじめに
https://bitbucket.org/alexzzzz/unity-c-5.0-and-6.0-integration
上記のBitbucketで公開されている「Unity C# 5.0 and 6.0 Integration」を
Unityプロジェクトに追加することで、
UnityでC#5.0と6.0の機能が使用できるようになります
導入手順
- 下記のページから「CSharp60Support XX.XX.XX.zip」をダウンロードする
https://bitbucket.org/alexzzzz/unity-c-5.0-and-6.0-integration/downloads - ダウンロードした「CSharp60Support XX.XX.XX.zip」を解凍する
- 「CSharp60Support」フォルダをUnityプロジェクトのフォルダに移動する
- 使用しているUnityのバージョンに合わせて「CSharp60Support」フォルダ内の
「CSharp60Support for Unity XX.unitypackage」をインポートする - UnityプロジェクトのProjectビューを右クリックして「Reimport All」を選択する
- Windowsを使用している場合 は「CSharp60Support」フォルダ内の
「ngen install.cmd」を右クリックして「管理者として実行(A)...」を選択する
サポートしているプラットフォーム
- Windows(エディタとStandalone)
- Mac OS X(エディタとStandalone)
- Android
- iOS
既知の問題
- C#5.0と6.0はUnity Cloud Buildサービスとの互換性がない
- Visual Studioでデバッグ中にMonoのC#6.0コンパイラを使用すると、
ときどきUnityがクラッシュする - IL2CPPはC#6.0の例外フィルターをサポートしていない
- 名前空間の中にMonoBehaviourが宣言されている場合は、
MonoBehaviourの宣言前にC#6.0の言語構造を含めることができない
使用例
自動実装プロパティ用の初期化子
using UnityEngine; public class Pokemon { public int Id { get; set; } = 25; public string Name { get; set; } = "ピカチュウ"; } public class Example : MonoBehaviour { void Awake() { var pokemon = new Pokemon(); Debug.Log( pokemon.Id ); Debug.Log( pokemon.Name ); } }
Getterのみの自動実装プロパティ
using UnityEngine; public class Pokemon { public int Id { get; } = 25; public string Name { get; } = "ピカチュウ"; public Pokemon( int id, string name ) { Id = id ; Name = name; } public Pokemon() { } } public class Example : MonoBehaviour { void Awake() { var pokemon = new Pokemon(); Debug.Log( pokemon.Id ); Debug.Log( pokemon.Name ); } }
ラムダ式本体によるメンバーの記述
using UnityEngine; public class Pokemon { public int Id { get; set; } public string Name { get; set; } public string GetItem() => "オレンのみ"; public void Attack() => Debug.Log( "10万ボルト" ); } public class Example : MonoBehaviour { void Awake() { var pokemon = new Pokemon(); Debug.Log( pokemon.GetItem() ); pokemon.Attack(); } }
ラムダ式本体によるプロパティの記述
using UnityEngine; public class Pokemon { public string Item => "オレンのみ"; } public class Example : MonoBehaviour { void Awake() { var pokemon = new Pokemon(); Debug.Log( pokemon.Item ); } }
using static
using UnityEngine; using static UnityEngine.Mathf; public class Example : MonoBehaviour { void Awake() { Debug.Log( Max( 0, 10 ) ); Debug.Log( Min( 0, 10 ) ); } }
Null条件演算子
using UnityEngine; using UnityEngine.UI; public class Example : MonoBehaviour { void Awake() { var text = GetComponent<Text>()?.text; var name = GameObject.Find( "Pokemon" )?.name; } }
文字列補間
using UnityEngine; public class Example : MonoBehaviour { void Awake() { var id = 25; var name = "ピカチュウ"; var text = $"{id} : {name}"; } }
nameof演算子
using UnityEngine; public class Example : MonoBehaviour { void Awake() { Debug.Log( nameof( gameObject ) ); Debug.Log( nameof( transform ) ); } }
参考サイト様