Unity で生成する Windows アプリの中身とデバッグ
こんにちは。
マイクロソフトの渡辺です。
前回は、「 Unity で Windows アプリをビルドしてみよう 」ということで、Unity Editor からビルドを行い、Visual Studio 上でアプリを実行してみるまでの流れをご紹介しました。今回は、この仕組みをもう少し詳しく見ていくとともに、Visual Studio 上でもゲームをデバッグしてみたいと思います。
※下記記事も合わせてご覧ください
Unity で Windows ストア アプリをビルドする流れ
まず前回 Unity で Windows アプリをビルドした流れをおさらいすると、Unity でのWindows ストア アプリ開発はざっくり、
- Unity Editor でゲームを開発
- Unity Editor から Windows ストア アプリをビルド
- 生成された Visual Studio のソリューションを開く
- Visual Studio で Windows ストア アプリのプラットフォーム固有機能を実装
- Visual Studio で最終的な Windows ストア アプリのバイナリをビルド
という流れで進みました。しかしなぜ、2回もビルドを行うのでしょうか。
少し細かい話になりますが、今後 Windows ストア アプリを開発する上で頭の片隅には置いておいた方がいい内容ですので、上記の流れを少し詳しく見ていきましょう。
Unity Editor から Visual Studio、Mono から .NET へ
( 1 ) 通常 Unity Editor 上で開発されるゲームは、.NET Framework のオープンソース実装である Mono でコンパイルされ、Mono ランタイム上でゲームが実行されます。( 5 ) 一方、Windows ストア アプリは、.NET でコンパイルされ、.NET/WinRT ランタイムの上で動作します。
この違いを乗り越えるため、Windows ストア アプリの開発では、Unity Editor でビルド -> もう一度 Visual Studio でビルド、というステップを踏みます。
具体的には、Unity Editor が Windows ストア アプリをビルドする際に、( 2 ) .NET コンパイラを利用してゲームをビルドし、Visual Studio のソリューションを生成します。この時は、.NET のサブセットである .NET Core プロファイルが使われます。
その後で、( 3 ) 生成されたソリューションを開き、( 4 ) Visual Studio 上で、Windows ストア アプリ固有の機能を .NET/WinRT API を使って開発。最終的には ( 5 ) アプリを .NET コンパイラでビルドし、.NET/WinRT ランタイム上で動かします。
Mono と .NET の違い
上述の通り、Unity Editor 上で動作するゲームと、最終的に Windows プラットフォーム上で動作するアプリでは、コンパイルに使われるプロファイルが違います ( Mono と .NET Core ) 。そのため、Mono にはあっても .NET Core プロファイルにはない API ( またはその逆 ) がいくつかあり、コンパイル時にエラーが発生することがあります。
ただ、これらの API の多くには、.NET API や WinRT API に代わりになるものがありますし、UnityEngine.Windows や UnityEngine.WindowsPhone、WinRTLegacy の下にいくつか替わりになる API も提供されています。
コードの修正ポイントは追って、このブログでご紹介します。また、「 Unity による Windows ストアへの移植のヒント 」にも詳しい API の実装方法やサンプルが示されていますので、ぜひご参照ください。
Unity Editor と Visual Studio での編集
実際のゲーム開発では、多くの場合、Unity Editor 上でのゲーム開発と、Visual Studio 上での Windows ストア 向けの開発は並行して進みます。
Unity Editor から Windows ストア アプリをビルドした際に、Visual Studio ソリューション内で変更が加えられるのは
- プロジェクト内の Data フォルダー
- プロジェクトの参照アセンブリ
の 2つです。
そのため、Visual Studio から加えたプロジェクトへの変更やプラットフォーム固有機能の実装、マニフェストファイルや構成ファイルの修正は、Unity Editor からの Build でソリューションを上書きしても失われることはありません。
ただし、Unity Editor にて新しいプラグインや参照の追加等、プロジェクトファイル自体に影響する変更を行った場合は、Visual Studio 上でプロジェクト ファイルを手動で変更を加える必要がある点にご注意ください。
Windows ストア アプリのデバッグ
Unity Editor から Windows ストア アプリをビルドする際に、Build Settings にて " Unity C# Projects " にチェックをつけました。このオプションによって、生成されるソリューション内に Assembly-CSharp-* プロジェクトが含まれ、Unity スクリプトを Visual Studio 上でもデバッグ&編集することが出来ます。ただし、このソースコードはコピーされたわけではなく、Unity Editor で見ているのと同じ、元のファイルを編集することになる点にはご注意ください。
Unity スクリプトの確認
それでは、ソリューションに含まれる Assembly-CSharp-* プロジェクトの中身を確認してみましょう。Assets/Scripts 以下に Unity Editor 内と同じようにスクリプトファイルが置かれています。
ブレークポイントを置いてデバッグしてみる
ここでは、Enemy.cs を開いてスコアの更新部分にブレークポイントを置いてみます。
そしてアプリをデバッグしてみて敵を倒すと...
ブレークポイントで処理がとまり、変数の状態等を確認することができます。
Unity Editor 上でのデバッグ
参考として Unity Editor 上でのデバッグについても触れたいと思います。
Unity Editor にはデフォルトの IDE として MonoDevelop が付属しています。なので、Unity Editor でゲームを開発しているときは MonoDevelop を使ってデバッグ。Windows ストア アプリとしてビルドした後は、Visual Studio 上でデバッグという形に通常はなります。
しかし、Unity Editor でゲームを開発している時も ( しいて言えば、iOS/Android 向けアプリを開発している時も )、Visual Studio の機能を使ってデバッグする方法があります。それを可能にするのが Visual Studio Tools for Unity という Visual Studio 向けの拡張機能です。こちらを利用していただくと、Visual Studio で Unity ゲームを開発/デバッグすることが出来ます。
詳しいインストール方法や使い方は下記記事をご覧ください。
Visual Studio Tools for Unity ( UnityVS ) で Unity 開発/デバッグの生産性を上げよう - Yuta Watanabe's Blog
このあとは
今回は、Unity での Windows ストア アプリをビルドする流れとデバッグ方法について、ご紹介しました。既存ゲームの移植のポイントや、Windows プラットフォーム固有機能の実装方法については、追ってこのブログで解説していきたいと思います。
次回移行は、アプリのリリースに向けた準備と、アプリ申請の流れや、Windows プラットフォーム固有機能の実装方法についてご紹介していきます。
関連リソース
Unity 開発者のための Windows ストア概要 - Yuta Watanabe's Blog