그냥 클래스 라이브러리로 유니티용 DLL을 만들었다간 아래와 같은 에러를 보게 됩니다.
프로젝트를 '.Net 3.5'의 '클래스 라이브러리'로 생성합니다.
(유니티는 여전히 mono 2.6입니다.)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace UnityDLL_Test { public class Class1 { public int c; public void AddValues(int a, int b) { c = a + b; } public static int GenerateRandom(int min, int max) { System.Random rand = new System.Random(); return rand.Next(min, max); } } }
유니티의 도큐먼트에 있는 코드 입니다 ㅎㅎㅎ
(참고 : unity Documentation - Managed Plugins)
이제 빌드를 돌리고 유니티의 에셋(Assets)폴더에 복사한후 플레이해봅시다.
.......
비주얼 스튜디오에서 프로젝트를 생성했다면 참조에 필요 없는 것들이 잔뜩 있는 것을 알 수 있습니다.
이 중에 'System.Core'와 'System.Xml'같은 것들이 대표적으로 유니티에서 에러를 뱉는 참조입니다.
우리가 만든 코드는 아무 참조가 없어도 되지만 'System', 'System.Data'만 두고 지웁니다.
이제 빌드를 돌리고 유니티에 추가하면 별문제 없이 동작합니다.
그래도 해당 참조가 필요하다면 가장 'mono'에 포함된 dll을 참조하는 방법이 있습니다.
(참고 : [Unity] 'DataTable'와 'List<t>'사용을 위한 'System.Data'추가 하기)
테스트는 해보지 않았지만 '.net 3.5'까지 호환되는 dll 까지만 참조 가능하지 않을까 생각됩니다.
(참고 : 유니티(unity3d)와 모노(mono project) )
문제는 비주얼 스튜디오에서는 'mono'용 dll을 참조할 수 없으므로 별도로 유니티에 해당 dll을 넣어 줘야 에러가 나지 않습니다.
(왜 이런 현상이 생기는지 모르겠습니다.)
이런 방법이 불편하다면 아예 모노 디벨롭(MonoDevelop)나 자마린 스튜디오(Xamarin Studio)에서 프로젝트를 생성하고 빌드하는 방법도 있습니다.
다른 방법으로는 비주얼 스튜디오에서 작업한 프로젝트를 모노 디벨롭나 자마린 스튜디오에서 열어 다시 빌드하는 방법이 있습니다.
소스 파일만 있다면 이 방법도 좋은 방법이죠.
문제는 모노에서 다시 빌드해도 유니티에서 기본적으로 로드되지 않은 참조들이 많아서 보통은 3번 방법을 써야 한다는 것이죠.
ㅡ,.ㅡ;
이래도 안되면 유니티의 콘솔 창을 확인해 봅시다.
일반적으로 콘솔에 보면 어떤 dll에서 문제가 일어나고 있는지 표시가 됩니다.
문제가 되는 dll이 표시된다면 해당 dll을 유니티에 맞게 코드를 수정해서 빌드를 하셔야 합니다.
만약 dll이 표시되지 않는다면?
Unhandled Exception: System.Reflection.ReflectionTypeLoadException: The classes in the module cannot be loaded.
위 스크린샷은 어떤 dll이 문제가 됐는지 확인이 안되는 내용입니다.
이럴 땐 해당 dll의 소스를 유니티 모노 디벨롭을 열어서 빌드가 되는 지 확인해야 합니다.
빌드가 안된다면 문제가 되는 코드를 찾아 수정하여 빌드하는 것입니다.
*2015년 09월 12일 추가*
'비주얼 스튜디오 2015'가 발표되면서 'Visual Studio Tools for Unity'라는 것이 추가되었습니다.
(참고 : Visual Studio - Visual Studio로 Unity 게임 작성)
'Visual Studio Tools for Unity'를 설치하고 나면 '대상 프레임워크'에 유니티(Unity)항목이 추가됩니다.
여기서 자신이 빌드할 환경에 맞는 프레임워크를 선택한 후 빌드하면 됩니다.
좀 번잡스럽긴 하지만 큰 작업 없이 유니티에 '.net'용 dll을 추가할 수 있다는 것이죠 ㅎㅎㅎ
이마저도 귀찮다는 게 함정!
ㅎㅎㅎ
물론 상황에 따라서는 위 방법들이 다 안될 수 있습니다.
그러면 답이 없죠.
(시간만 많다면 해결한 수는 있을 것입니다.)
가장 좋은 시나리오는 유니티가 PCL에서 지원 되는 것인데....비주얼 스튜디오 2015에서는 이루어질런지?
(혹시 제가 방법을 모르고 있는 것이면 알려주세요~)