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
にあった。