일반적으로 스크립트는 프로젝트에 소스 파일로 유지되고 소스가 변경될 때마다 Unity에 의해 컴파일됩니다. 그러나 외부 컴파일러를 활용하여 스크립트를 dynamically linked library(DLL)에 컴파일할 수도 있습니다. 결과로 얻은 DLL은 프로젝트에 추가하고 노멀 스크립트와 마찬가지로 포함된 클래스를 오브젝트에 연결할 수 있습니다.
Unity에서는 일반적으로 DLL보다 스크립트 작업이 훨씬 더 쉽습니다. 그러나 DLL 형식으로 제공되는 타사 Mono 코드를 사용해야만 하는 경우가 있습니다. 자체 코드를 개발할 때 코드를 DLL로 컴파일하고 Unity 프로젝트에 추가하여 Unity에서 지원하지 않는 컴파일러를 사용할 수도 있습니다. 또한 에셋 스토어 제품의 경우와 같이 소스 없이 Unity 코드를 제공하려는 경우 DLL을 사용하면 작업이 한결 수월합니다.
DLL을 생성하려면 우선 적절한 컴파일러가 필요합니다. .NET 코드를 만드는 모든 컴파일러를 Unity에서 사용할 수 있는 것은 아니기 때문에 중요한 작업에 착수하기 전에 컴파일러를 테스트해보는 것이 좋습니다. DLL에 Unity API에 의존하는 코드가 없으면 적절한 컴파일러 옵션을 사용하여 간단하게 DLL로 컴파일할 수 있습니다. Unity API를 사용하려면 Unity 자체DLL을 컴파일러에서 사용할 수 있도록 해야 합니다. Mac의 경우에는 애플리케이션 번들에 포함되어 있습니다(컨텍스트 메뉴의 ‘패키지 콘텐츠 표시’ 커맨드를 사용하여 번들의 내부 구조를 볼 수 있습니다. Unity 애플리케이션을 마우스 오른쪽 클릭하거나 Ctrl 클릭해야 합니다).
Unity DLL의 경로는 일반적으로
/Applications/Unity/Unity.app/Contents/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/Managed/UnityEngine.dll -target:library ClassesForDLL.cs
여기서 -r 옵션은 빌드에 포함시켜야 하는 라이브러리 경로를 지정하며, 위에서는 UnityEngine 라이브러리입니다. -target 옵션은 어떤 빌드 타입이 필요한지 지정합니다. “library”라는 단어는 DLL 빌드를 선택하기 위해 사용되었습니다. 마지막으로 컴파일할 소스 파일의 이름은 ClassesForDLL.cs 입니다(이 파일은 현재 작업 폴더에 있다고 추정하지만 필요한 경우 전체 경로를 활용해 파일을 지정할 수도 있습니다). 여기까지 잘 따라왔다면 결과로 얻은 DLL 파일이 소스 폴더와 같은 위치에 나타납니다.
컴파일 한 후에 DLL파일은 다른 에셋과 마찬가지로 Unity 프로젝트에 드래그 앤 드롭할 수 있습니다. DLL 에셋은 폴드아웃 삼각형 표시가 있어 라이브러리 안에 별도의 클래스를 나타내는 데 사용할 수 있습니다. MonoBehaviour에서 파생된 클래스는 일반적인 스크립트와 마찬가지로 게임 오브젝트에 드래그할 수 있습니다. 비MonoBehaviour 클래스는 다른 스크립트에서 일반적인 방법으로 직접 사용할 수 있습니다.
이 섹션에서는 간단한 DLL 예제를 빌드하여 Visual Studio와 통합하는 방법을 설명합니다. 또한 DLL 디버깅 세션을 준비하는 방법도 살펴봅니다.
우선, Visual Studio를 열고 새 프로젝트를 생성하십시오. Visual Studio에서 파일(File) > 신규(New) > 프로젝트(Project) 를 선택한 후 Visual C# > 클래스 라이브러리(Class Library) 를 선택해야 합니다.
새 라이브러리에 정보를 입력합니다.
그런 다음 레퍼런스를 Unity DLL에 추가해야 합니다. Visual Studio의 솔루션 익스플로러(Solution Explorer)에서 레퍼런스(References) 에 대한 컨텍스트 메뉴를 열고 레퍼런스 추가(Add Reference) 를 선택하십시오. 그런 다음 찾아보기(Browse) > 찾아보기(Browse) > 파일 선택(select file) 을 선택해야 합니다.
이 단계에서는 필요한 DLL 파일을 선택할 수 있습니다. Mac OS X에서 파일 경로는 다음과 같습니다.
Applications/Unity.app/Contents/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을 에셋(Assets) 폴더에 복사합니다. 그런 다음 “Test”라는 C# 스크립트를 에셋(Assets) 폴더에 만들고 그 콘텐츠를 다음의 코드로 대체합니다.
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용 디버그 심볼을 준비해야 합니다. Visual Studio의 커맨드 프롬프트에서 실행하여 <project folder>\bin\Debug\DLLTest.pdb를 파라미터로 전달하십시오.
Program Files\\Unity\\Editor\\Data\\Mono\\lib\\mono\\2.0\\pdb2mdb.exe를
그런 다음 전환된 파일 <project folder>\bin\Debug\DLLTest.dll.mdb 를 에셋/플러그인(Assets/Plugins) 에 복사하십시오.
설치가 완료되면 Unity에서 일반적인 방식으로 DLL을 활용해 코드를 디버깅할 수 있습니다. 스크립팅 툴 섹션에서 디버깅에 대해 자세하게 참조할 수 있습니다.
Unity에서 ‘안전하지 않은’ C# 코드 컴파일에 대한 지원을 활성화할 수 있습니다. 이렇게 하려면 Edit > Project Settings 에서 Player 카테고리를 선택합니다. Other Settings 패널을 펼친 후 Allow ‘unsafe’ Code 체크박스를 표시합니다.
2018–03–20 일부 편집 리뷰를 거쳐 페이지 수정됨
2018.1에서 MonoDevelop는 Visual Studio로 교체됨
Unity 2018.1에서 ‘안전하지 않은 C# 코드 체크박스’ 추가됨