Hiromuブログ

最近はこちら(https://zenn.dev/hiromu)が本体

UnityのIL2CPPプロジェクトをC#デバッグする方法

dotnetbyexample.blogspot.com

こちらのサイトで 「HoloLensまたはイマーシブヘッドセットで実行されているUnity IL2CPPプロジェクトを使用したC#コードのデバッグ」 の方法が紹介されていたので試してみました。

結論としてはIL2CPPビルドしたプロジェクトをHoloLensで実行中にC#のコードにブレークポイントを仕掛けてデバッグすることができました。

確認環境

Visual Studio設定

  • デスクトップとUWP C++の開発に必要な項目のツールインストールする
  • Unityによるゲーム開発項目のツールインストールする(オプションに表示されているUnityはUnity Hubを介してインストールする場合はチェックを外す)

Unityプロジェクト設定

動作確認のため、Cubeをエアタップしたら移動する簡単なプロジェクトを以下の手順で構築します。

  • Unityプロジェクトを新規作成する

  • Build SettingsのPlatformでUniversal Windows Platformを選択して[Switch Platform]ボタンを押す

  • Microsoft.MixedReality.Toolkit.Unity.Foundation-v2.0.0-Beta2.unitypackage をインポートする

  • 以下のダイアログが表示されるためApplyを選択する

  • メニューの[MMixed Reality Toolkit] -> [Configure...]を選択する

  • シーンにCubeを配置する

  • 以下確認用スクリプトを作成し、Cubeにアタッチする

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Sample : MonoBehaviour
{
    public void MoveCube()
    {
        Debug.Log("Move");
        Vector3 vec = transform.position;
        transform.position = new Vector3(vec.x + 0.1f, vec.y, vec.z);
    }
}
  • CubeにPointerClickHandler(Assets/MixedRealityToolkit.SDK/Features/Input/Handlers/PointerClickHandler)をアタッチする

  • PointerClickHandlerのOn Pointer Clicked Action Event の▼を選択し項目を広げ、Input ActionをSelect、Unity Event()に先ほど作成したスクリプトのMoveCubeを選択する

以上で、サンプルプロジェクトの実装が出来ました。

ビルド設定

Unityでデバッグ可能なC++アプリケーションを構築するためには以下の設定にします。(参考サイトにはCopy Referencesが本当に必要かどうかはわからないと書かれている)

capability設定

最初はネットワーク機能のない簡単なサンプルアプリのため、capability設定はなにもせずに試していたのですうまくいきませんでした。参考サイトをよく見ると「 デバッグを可能にするために、Unityはその中にデバッガをアタッチすることを可能にするある種の小さなサーバーを持った専門のプレーヤーを作ります。つまり、ネットワークアクセスが必要です。」と書かれています。つまり[Player Settings] -> [Publishing Settings]で以下の設定が必要となります。

UWP C++アプリの構築とデプロイ

Debug用のアプリをビルドしてデプロイします。

デプロイしたアプリを実機で起動します。

デバッグ

Unity C#( 'editor')ソリューションに戻ります。
試しに以下にブレークポイントを設定します。

Visual Studioのメニュー [デバッグ] -> [Unity デバッガーのアタッチ] を選択します。

UnityエディタとHoloLensで動作しているアプリが表示されているため、HoloLensで動作しているアプリ(この場合はUWPPlayerX86の方)を選択します。

HoloLensで表示されている白いキューブをエアタップします。

ブレークポイントに引っかかりました!ステップ実行することも可能です。

終わりに

IL2CPPでビルドしたアプリケーションに対してC#プロジェクト内にブレークポイントを張り、デバッグすることができました。HoloLens実機にて動作確認を行いましたが、 特にHoloLensに限った話ではなく、一般的なUnityプロジェクトでも本方法でデバッグ可能と思います。