일반적으로 스크립트는 프로젝트에 소스 파일로 유지되고 소스가 변경될 때마다 Unity에 의해 컴파일됩니다. 그러나 외부 컴파일러를 활용하여 스크립트를 dynamically linked library(DLL)에 컴파일할 수도 있습니다. 결과로 얻은 DLL은 프로젝트에 추가하고 노멀 스크립트와 마찬가지로 포함된 클래스를 오브젝트에 연결할 수 있습니다.
Unity에서는 일반적으로 DLL보다 스크립트 작업이 훨씬 더 쉽습니다. 그러나 DLL 형식으로 제공되는 타사 Mono 코드를 사용해야만 하는 경우가 있습니다. 자체 코드를 개발할 때 코드를 DLL로 컴파일하고 Unity 프로젝트에 추가하여 Unity에서 지원하지 않는 컴파일러(예를 들어, F#)를 사용할 수도 있습니다. 또한 소스 없이 Unity 코드를 제공하려는 경우 (예를 들면 에셋 스토어 제품의 경우) DLL를 사용하면 쉽습니다.
DLL을 생성하려면 우선 적절한 컴파일러가 필요합니다. .NET 코드를 만드는 모든 컴파일러를 Unity에서 사용할 수 있는 것은 아니기 때문에 중요한 작업에 착수하기 전에 컴파일러를 테스트해보는 것이 좋습니다. DLL에 Unity API에 의존하는 코드가 없으면 적절한 컴파일러 옵션을 사용하여 간단하게 DLL로 컴파일할 수 있습니다. Unity API를 사용하려면 Unity 자체DLL을 컴파일러에서 사용할 수 있도록 해야 합니다. Mac의 경우에는 애플리케이션 번들에 포함되어 있습니다(컨텍스트 메뉴의 ‘패키지 콘텐츠 표시’ 커맨드를 사용하여 번들의 내부 구조를 볼 수 있습니다. Unity 애플리케이션을 마우스 오른쪽 클릭하거나 Ctrl 클릭해야 합니다).
Unity DLL의 경로는 일반적으로
/Applications/Unity/Unity.app/Contents/Frameworks/Managed/
…이며 두 DLL을 UnityEngine.dll 및 UnityEditor.dll이라고 합니다.
Windows에서 DLL은 Unity 애플리케이션이 포함된 폴더에 있습니다. 경로는 일반적으로
C:\\Program Files\\Unity\\Editor\\Data\\Managed
…이며 DLL의 이름은 Mac OS의 경우와 동일합니다.
DLL을 컴파일할 때의 정확한 옵션은 사용되는 컴파일러에 따라 다릅니다. 예를 들어 Mono C# 컴파일러인 mcs의 커맨드 라인은 Mac OS에서 다음과 같습니다: -
mcs -r:/Applications/Unity/Unity.app/Contents/Frameworks/Managed/UnityEngine.dll -target:library ClassesForDLL.cs
여기서 -r 옵션은 빌드에 포함시켜야 하는 라이브러리 경로를 지정하며, 위에서는 UnityEngine 라이브러리입니다. -target 옵션은 어떤 빌드 타입이 필요한지 지정합니다. “library”라는 단어는 DLL 빌드를 선택하기 위해 사용되었습니다. 마지막으로 컴파일할 소스 파일의 이름은 ClassesForDLL.cs 입니다(이 파일은 현재 작업 폴더에 있다고 추정하지만 필요한 경우 전체 경로를 활용해 파일을 지정할 수도 있습니다). 여기까지 잘 따라왔다면 결과로 얻은 DLL 파일이 소스 폴더와 같은 위치에 나타납니다.
컴파일 한 후에 DLL파일은 다른 에셋과 마찬가지로 Unity 프로젝트에 드래그 앤 드롭할 수 있습니다. DLL 에셋은 폴드아웃 삼각형 표시가 있어 라이브러리 안에 별도의 클래스를 나타내는 데 사용할 수 있습니다. MonoBehaviour에서 파생된 클래스는 일반적인 스크립트와 마찬가지로 게임 오브젝트에 드래그할 수 있습니다. 비MonoBehaviour 클래스는 다른 스크립트에서 일반적인 방법으로 직접 사용할 수 있습니다.
이 섹션에서는 빌드 방법과 간단한 DLL 예를 MonoDevelop 및 Visual Studio와 통합하는 방법을 설명합니다. 또한 DLL 디버깅 세션을 준비하는 방법도 살펴봅니다.
먼저 MonoDevelop 또는 Visual Studio를 열어 새 프로젝트를 만듭니다. MonoDevelop에서는 File > New > Solution and then choosing C# > Library 를 선택합니다. Visual Studio에서는 File > New > Project and then choose Visual C# > Class Library 를 선택해야 합니다.
새 라이브러리에 정보를 입력합니다.
다음으로, Unity DLL에 참조를 추가해야 합니다. MonoDevelop에서는 솔루션 브라우저에서 References 컨텍스트 메뉴를 열고 Edit References 를 선택합니다. 그리고 .Net Assembly tab > File System > select file 옵션을 선택합니다. Visual Studio에서는 솔루선 탐색기에서 References 컨텍스트 메뉴를 열고 Add Reference 를 선택합니다. 이어서, Browse > Browse > select file 옵션을 선택합니다.
이 단계에서는 필요한 DLL 파일을 선택하는 옵션이 주어집니다. Mac OSX에서 파일을 발견할 수 있는 곳은
Applications/Unity.app/Contents/Frameworks/Managed/UnityEngine.dll
…Windows에서 경로는
Program Files\\Unity\\Editor\\Data\\Managed\\UnityEngine.dll
이 예제에서 솔루션 브라우저에서 클래스 이름을 “MyUtilities”로 이름을 바꾼 후 다음의 코드로 대체합니다.
using System;
using UnityEngine;
namespace DLLTest {
public class MyUtilities {
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);
}
}
}
그리고 프로젝트를 빌드해 디버그 심볼과 함께 DLL 파일을 생성합니다.
이 예제에서 Unity의 새 프로젝트를 생성하고 빌드한 파일 <project folder>/bin/Debug/DLLTest.dll
을 에셋 폴더에 복사합니다. 이어 “Test”라는 C# 스크립트를 에셋 폴더에 만들고 그 콘텐츠를 다음의 코드로 대체합니다.
using UnityEngine;
using System.Collections;
using DLLTest;
public class Test : MonoBehaviour {
void Start () {
MyUtilities utils = new MyUtilities();
utils.AddValues(2, 3);
print("2 + 3 = " + utils.c);
}
void Update () {
print(MyUtilities.GenerateRandom(0, 100));
}
}
스크립트를 씬의 오브젝트에 연결하고 재생을 누르면 콘솔 창의 DLL에서 코드의 결과물을 볼 수 있습니다.
우선 DLL용 디버그 심볼을 준비해야 합니다. MonoDevelop에서 <project folder>/bin/Debug/DLLTest.dll.mdb
파일을 Assets/Plugins 폴더로 복사합니다. Visual Studio에서
Program Files\\Unity\\Editor\\Data\\Mono\\lib\\mono\\2.0\\pdb2mdb.exe를
명령 프롬프트에 실행하고, <project folder>\bin\\Debug\\DLLTest.pdb
를 파라미터로 전달합니다. 그리고, 변환된 <project folder>\bin\\Debug\\DLLTest.dll.mdb
파일을 Assets/Plugins 폴더로 복사해야 합니다.
다음으로, MonoDevelop에서 “Test” 스크립트를 엽니다. 툴 메뉴(Windows)나 MonoDevelop-Unity 메뉴(MacOS)에서 Unity 디버거가 활성화되어 있는지 확인해야 합니다. 이 메뉴에서 필요한 옵션은 Add-in Manager > Installed tab > Unity > select Mono Soft Debugger Support for Unity > Enable 입니다.
설치가 완료되면 Unity에서 일반적인 방식으로 DLL을 활용해 코드를 디버깅할 수 있습니다. 스크립팅 툴 섹션에서 디버깅에 대해 자세하게 참조할 수 있습니다.