【Rider】Unityの機能を使ったDLLをビルドする手順

RiderでUnityの機能を使ったDLLをビルドする方法です。

Unity 2022.3.13f1
Rider 2023.3.2

やりたいこと

UnityではC#スクリプトを書くことによりそれが自動的にコンパイルされ、内部的にDLLが生成されます。
これとは別に、Unityの外側で作られたDLLをインポートして使うこともできます。

本記事では、このようにUnityにインポートして使えるDLLを作る手順を紹介します。
またその上で、Unityの機能を使ったDLLをビルドします。

.NETソリューションとプロジェクトを作成

まずRiderで.NETのソリューションとプロジェクトを作成します。
以下のような設定でClass Library作成します。

クラスライブラリを作成

次に プロジェクトを右クリック > Properties… からプロジェクトの設定をします。

まず Target framework は netstandard2.1 に設定しておきます。
さらにUnityで使えないC#の機能を使わないように、C#のバージョンはは9あたりにしておきます。
Nullable Reference TypesもDisableにしておきます

Project Properties

次にcsprojを開いて、ImplicitUsingsを削除します。

Implicit Usingsを削除

.NETプロジェクトにUnityEngineを参照させる

次にこのプロジェクトにUnityEngineのDLLを参照させます。

プロジェクトを右クリック > Add > Reference… から設定画面を開き、

Applications\Unity\Hub\Editor\2022.3.13f1\Unity.app\Contents\Managed

配下あたりにあるDLLを加えます。

UnityEditorなど、UnityEngine以外のDLLも必要に応じて加えます。
ちゃんと必要なものだけ参照させるにこしたことはないですが、DLLを成果物に同梱しない設定にするなら使わないものを追加しても問題ないはずです。

Unityの機能を使ったプログラムを書く

次に適当にUnityEngineの機能を使ったクラスを作ります。

using UnityEngine;

namespace UnityDLLTest;

public sealed class Example
{
    public void Log(string message)
    {
        Debug.Log(message);
    }
}

DLLをビルド

ConfigurationからPublish to folderの設定をしてDLLをビルドします。

DLLをビルド

これを実行すると成果物の出力先がログに出力されるので、そこからDLLを取得できます。

動作確認

前節で取得したDLLをUnityに入れ、先ほど作ったクラスのメソッドを呼びます。

using UnityDLLTest;
using UnityEngine;

public class Test : MonoBehaviour
{
    private void Start()
    {
        new Example().Log("test");
    }
}

これを適当なGameObjectにアタッチして再生します。

下図のようにログが出力されたら成功です。

ログ出力

参考

docs.unity3d.com