C# で作成したクラスライブラリを、Unityプロジェクトで参照し、デバッグする方法について書きます。
クラスライブラリで作成したdll、pdb ファイルをUnityプロジェクトのAssets/Plugins に置くことで、デバッグができます。
- Windows10 Home 64bit
- VisualStudio Community 2019 Version 16.11.2
- .Net FrameWork 4.8
- Unity 2020.3.17f1(LTS)
- クラスライブラリ .NET Standard2.0
参照、デバッグの設定
ソリューションの構成
以下のソリューション構成で解説していきます。
Assembly-CSharp : Unityプロジェクト
- UnitySample.cs : Unityからクラスライブラリを参照するスクリプト
SampleClassLibrary : クラスライブラリ
- Class1.cs : Unityから参照されるクラスライブラリ

参照、デバッグの設定
クラスライブラリを作成するとdll ファイルが作成されます。そのファイルを Assets/Plugins に置くことでUnityプロジェクトから参照できます。
また、クラスライブラリの内部にステップインでデバッグするためには、Debugビルドで生成されるpdbファイルも同じ場所に置く必要があります。
毎回ビルド後に手動でコピーするのは手間ですし、忘れるかもしれません。なので、ビルド後に自動でコピーする設定をします。
まずは、Assets フォルダ内にPlugins フォルダを手動で作成します。既に作成されているなら、不要です。

ソリューションエクスプローラーでクラスライブラリを右クリック→プロパティを選択します。

ビルド後イベント→ビルド後イベントのコマンドラインで、以下を入力します。
if $(ConfigurationName) == Debug copy $(TargetDir)FN3dS.dll $(SolutionDir)Assets\Plugins
if $(ConfigurationName) == Debug copy $(TargetDir)FN3dS.pdb $(SolutionDir)Assets\Plugins

この設定をした後、クラスライブラリをビルドします。ビルド後、dllファイルとpdbファイルがAssets/Plugins にコピーされます。
参照、デバックの設定確認
設定ができているか確認します。
参照されるクラスライブラリ
まずは、参照されるクラスライブラリを作成します。
using System;
namespace SampleClassLibrary
{
public class Class1
{
public int GetMaxValue( int a, int b )
{
return Math.Max(a, b);
}
}
}
2つの引数のうち大きい値を返すという関数です。この関数をUnity から呼び出します。
作成後、ビルドします。dllファイルとpdbファイルがAssets/Plugins にコピーされているはずです。
参照するスクリプト
参照スクリプトです。
using UnityEngine;
using SampleClassLibrary;
public class UnitySample : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
Class1 class1 = new Class1();
int max = class1.GetMaxValue(5, 10);
}
// Update is called once per frame
void Update()
{
}
}
デバッグしてみる
実際にデバッグで参照できているか確認します。
Unityで、Sampleという名前の空のGameObjectを作成し、先ほど作成したUnitySample.cs をコンポーネントに追加します。

Visual Studio でUnityにアタッチし、Unityでプレイモードに遷移し、デバック開始します。
UnitySampleクラスのStart関数でブレークポイントを設定します。

↑の状態でステップインすると、

クラスライブラリのデバッグができました。pdbファイルをコピーしていなければ、これはできません。
ライブラリも正常に動作しています。判定結果が正しいです。

まとめ
C# で作成したクラスライブラリを、Unityプロジェクトで参照し、デバッグする方法について書きました。
クラスライブラリで生成される、dll、pdb ファイルをAssets/Plugins に置くことでUnityプロジェクトから参照できます。デバッグもできるようになります。
コメント