プログラミングで世界を変える

ゲームプログラミングと技術のこと

Unity+UniRxでUWP対応のWSA(Windows Store App)を開発するときの備忘録

はじめに

UnityではスタンドアロンのWindowsアプリの他に、WSA(Windows Store App)のビルドにも対応しています。今回ビルドをしてみてつまづいたことを備忘録として残します。Unity(v5.5.0b3)時点での情報です。

この記事の存在意義としては、点在するドキュメント(英語含む)が日本語で少しまとまってるところです。誰かの足がかりになると幸いです。

WSAビルド(.NET Core)

WSAでは通常とコンパイラが異なるため、注意が必要です。

Unity はスクリプトファイルのコンパイルに Mono を使用しており、.NET 3.5 にある API をお使いいただけます。Compilation Overrides を利用すれば Windows ストア アプリ用の .NET (.NET Core とも呼ばれます) を C# ファイル中で使用することができます。

docs.unity3d.com

エディタ上でのコンパイラとビルド時のコンパイラが異なるため、条件付きコンパイルを利用してコードの書き分けをすると良いと思います。.NET Coreでのコンパイル時には、自動的にNETFX_COREが定義されます。

docs.unity3d.com

条件付きコンパイルでは時々、ビルド時にエディタ上でのエラーが発生することがありました。私の場合はSwitch Platformを繰り返して解消しましたので、同じような状況になったら試して見ると良いかもしれません。

※ 2017/2/4追記

ビルド時エラーの解消方法について記事を書かれている方がいらっしゃいましたので、参考にしてみると良いかもしれません(未検証)。

mslgt.hatenablog.com

WSA Player Settings

Compilation Overridesはデフォルトで.NET Coreになっていますが、Noneにすれば通常のコンパイラを使ってビルドが可能です。しっかり確認していませんが、この時NETFX_COREは定義されないように思います。

docs.unity3d.com

UniRx

UniRxでは.NET 4.0以降で実装されているIObservableを自前で定義しています(Unityは.NET 3.5を使用しているため)。 そのため、.NET Coreでのコンパイル時にはコンフリクトが発生する可能性があります。UniRxでは.NET Coreコンパイル時に定義されるNETFX_COREを用いてIObservableを無効にしています。そのためIObservable<T>は.NET CoreではSystem.IObservable<T>と解釈され、それ以外ではUniRx.IObservable<T>と解釈されるようになっています。上記の挙動をさせるためには、名前空間を明示した型を使わないようにすべきとのことです。

Some interfaces, such as UniRx.IObservable and System.IObservable, cause conflicts when submitting to the Windows Store App. Therefore, when using NETFX_CORE, please refrain from using such constructs as UniRx.IObservable and refer to the UniRx components by their short name, without adding the namespace. This solves the conflicts.

github.com

List.ForEach

.NET COREではList.ForEachが使えず、通常のForEachメソッドで代替すれば良いそうです。

List.ForEach has been removed in Metro style apps. While the method seems simple it has a number of potential problems when the list gets mutated by the method passed to ForEach. Instead it is recommended that you simply use a foreach loop.

https://social.msdn.microsoft.com/Forums/en-US/758f7b98-e3ce-41e5-82a2-109f1df446c2/where-is-listtforeach?forum=winappswithcsharpsocial.msdn.microsoft.com

参考

実際の流れの確認にとても役に立ちました。

yutawatanabe.hatenablog.com

TIPSが載っています。

kcs1959.jp