Assets/ に DLL をほうりこむ時

$ xbuild X/X.csproj

とかってやって作った DLL は、Unity のエディタに D&D して取り込んだ場合は問題なく使えるが、 Unity とは関係のないところでコピーすると Unhandled Exception: System.Reflection.ReflectionTypeLoadException: The classes in the module cannot be loaded. と言われて使えない。

なんでそうなのかはよく分からんけど、git submodule で管理してるやつをビルドして Assets/ にコピーしてということをコマンドでやりたいのでそれはちょっと困る。

こうやって作ると良かった。

unity-dll.sh:

#!/bin/sh
UNITY=/Applications/Unity/Unity.app/Contents
$UNITY/Mono/bin/smcs -r:$UNITY/Managed/UnityEngine.dll -r:$UNITY/Managed/UnityEditor.dll -out:$1 -target:library $2
$ ./unity-dll.sh Foo.dll Foo/*.cs

Unity - マニュアル: マネージド プラグイン に書いてあったけど、ここに書いてるのとは UnityEngine.dll の場所が微妙に違う。自分のところでは Contents/Frameworks/Managed/UnityEngine.dll ではなく Contents/Managed/UnityEngine.dll にあった。