本日は Unity の技術調査枠です。
以前、Windows-universal-samples を HoloLens 上で試してみました。
bluebirdofoz.hatenablog.com
さて、いざ Unity に取り込んでこのコードを利用しようとしたところ、async/await が利用できない問題が発生しました。
例えば、以下のようなコードを作成するとUnityのビルドでエラーが発生します。
・AwaitTests01.cs
public class AwaitTest01 : MonoBehaviour { // Use this for initialization void Start () { awaitasync(); } public async void awaitasync() { Debug.Log("message"); } }
エラーメッセージには「Feature 'asynchronous functions' cannot be used because it is not part of the C# 4.0 language specification」というメッセージが表示されています。
'asynchronous functions'の機能は C#4 じゃ使えないというエラーのようです。
しかし調べてみると、Unity 2017 は C# 6 に対応しているとの情報がありました。
qiita.com
では何故使えないかというと、現状、Unity 側のデフォルト設定が .NET 3.5 のままらしい。
メニューから Edit -> Project Settings -> Player でプロジェクト設定を開きます。
デフォルトだと以下の通り、「Stable(.NET 3.5 Equivalent)」が選択されているので「Experimental(.NET 4.6 Equivalent)」に変更します。
Unity を再起動すると……。
エラーが消えました。Unity プロジェクトで C# 5 以降のコードを利用する際はこの変更を行う必要があります。
因みに、上記のエラーを解決しても Script を VisualStudio で開くと以下のようにエラーが表示されます。
これは生成される VisualStudio のプロジェクトファイルに
プロジェクトディレクトリにある csproj ファイルをテキストエディタで開きます。
以下の
・T_CodeTestProject.CSharp.csproj
<LangVersion Condition=" '$(VisualStudioVersion)' != '10.0' ">6</LangVersion>
この状態で再び Script を VisualStudio で開くとエラーが解消されています。