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にしておきます
次にcsprojを開いて、ImplicitUsingsを削除します。
.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をUnityに入れ、先ほど作ったクラスのメソッドを呼びます。
using UnityDLLTest; using UnityEngine; public class Test : MonoBehaviour { private void Start() { new Example().Log("test"); } }
これを適当なGameObjectにアタッチして再生します。
下図のようにログが出力されたら成功です。