관리되는 플러그인은 Visual Studio와 같은 툴로 Unity 외부에서 생성하여 DLL(Dynamically Linked Library)로 컴파일하는 .NET 어셈블리입니다.
이 프로세스는 Unity가 Unity 프로젝트의 Assets 폴더에 소스 파일로 저장하는 표준 C# 스크립트와 다릅니다. Unity는 표준 C# 스크립트가 변경될 때마다 컴파일하지만, DLL은 사전 컴파일되어 변경되지 않습니다. 컴파일된 프로젝트에 .dll 파일을 추가하고, 포함된 클래스를 표준 스크립트와 동일한 방식으로 게임 오브젝트에 연결할 수 있습니다.
C#의 관리되는 코드에 대한 자세한 내용은 Microsoft의 ‘관리되는 코드란?’ 문서를 참조하십시오.
관리되는 플러그인에는 .NET 코드만 포함되어 있기 때문에 .NET 라이브러리가 지원하지 않는 기능에는 액세스할 수 없습니다. 하지만 관리되는 코드는 Unity가 스크립트를 컴파일하는 데 사용하는 표준 .NET 툴에 액세스할 수 있습니다.
Unity에서 DLL로 작업할 때는 스크립트로 작업할 때보다 더 많은 단계를 완료해야 합니다. 하지만 대신에 .dll 파일을 생성하여 Unity 프로젝트에 추가하는 것이 도움이 되는 상황도 있습니다. 예를 들면 다음과 같은 경우입니다.
이 페이지에서는 관리되는 플러그인을 만드는 데 사용할 수 있는 일반적인 방법과 Visual Studio를 사용하여 관리되는 플러그인을 만들고 디버그 세션을 설정하는 방법을 설명합니다.
관리되는 플러그인을 만들려면 DLL을 생성해야 합니다. 그렇게 하려면 다음과 같은 적절한 컴파일러가 필요합니다.
.NET 코드를 생성하는 모든 컴파일러가 Unity와 호환되는 것은 아니므로, 중요한 작업을 수행하기 전에 일부 사용 가능한 코드로 컴파일러를 테스트해야 합니다. DLL을 생성하는 방법은 DLL에 Unity API 코드가 포함되어 있는지 여부에 따라 다릅니다.
C:\Program Files\Unity\Hub\Editor\<version-number>\Editor\Data\Managed\UnityEngine
Unity.app
파일을 찾습니다. macOS의 Unity DLL 경로는 /Applications/Unity/Hub/Editor/<version-number>/Unity.app/Contents/Managed/UnityEngine
입니다.Unity.app
을 마우스 오른쪽 버튼으로 클릭합니다.UnityEngine
폴더에는 여러 모듈에 대한 .dll 파일이 들어 있습니다. 스크립트에서 사용할 수 있도록 .dll 파일을 참조하십시오. 일부 네임스페이스는 Unity 프로젝트의 컴파일된 라이브러리에 대한 레퍼런스도 필요로 합니다(예: UnityEngine.UI
). 프로젝트 폴더의 다음 디렉토리에서 찾을 수 있습니다. ~\Library\ScriptAssemblies
DLL에 Unity API 코드가 포함되어 있지 않거나 이미 Unity DLL을 사용할 수 있도록 설정한 경우 컴파일러 문서에 따라 .dll 파일을 컴파일하십시오. DLL을 컴파일하는 데 사용하는 정확한 옵션은 사용하는 컴파일러에 따라 다릅니다. 예를 들어 Roslyn 컴파일러에 대한 커맨드 라인 csc
는 macOS에서 다음과 같이 보일 수 있습니다.
csc /r:/Applications/Unity/Hub/Editor/<version-number>/Unity.app/Contents/Managed/UnityEngine.dll /target:library /out:MyManagedAssembly.dll /recurse:*.cs
이 예제에서 다음을 참고하십시오.
/r
옵션을 사용하여 빌드에 포함할 라이브러리(이 경우 UnityEngine
라이브러리)의 경로를 지정합니다./target
옵션을 사용하여 필요한 빌드 타입을 지정합니다. “library”는 DLL 빌드를 나타냅니다./out
을 사용하여 라이브러리 이름을 지정합니다. 이 경우 “MyManagedAssembly.dll”입니다./recurse
메서드를 사용하여 현재 작업 디렉토리와 모든 하위 폴더에 “.cs”로 끝나는 모든 파일을 추가합니다. 결과 .dll 파일은 소스 파일과 동일한 폴더에 나타납니다.DLL을 컴파일한 후에는 다른 에셋처럼 .dll 파일을 Unity 프로젝트로 드래그할 수 있습니다. 그러고 나서 다음을 수행할 수 있습니다.
이 섹션에서는 다음을 설명합니다.
DLLTest
를 이름으로 사용)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);
}
}
}
Unity에서 DLL에 대한 디버깅 세션을 준비하려면 다음 단계를 따르십시오.
<project folder>/bin/Debug/DLLTest.dll
)을 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));
}
}
Unity는 콘솔 창에 DLL의 코드 출력을 표시합니다.
안전하지 않은 C# 코드는 메모리에 직접 액세스할 수 있는 코드입니다. 기본적으로 비활성화됩니다. 컴파일러가 보안 위험이 발생할지 확인할 수 없기 때문입니다.
안전하지 않은 코드를 사용하여 다음을 수행할 수 있습니다.
안전하지 않은 C# 코드 컴파일에 대한 지원을 활성화하려면 Edit > Project Settings > Player > Other Settings에서 Allow Unsafe Code를 활성화하십시오.
자세한 내용은 안전하지 않은 코드에 대한 Microsoft 문서를 참조하십시오.