Version: 2020.3
플러그인 인스펙터
네이티브 플러그인

관리되는 플러그인

관리되는 플러그인은 Visual Studio 같은 툴을 사용하여 생성되며 관리되는 .NET 어셈블리입니다. 여기에는 .NET 코드만 포함되어 있으므로 .NET 라이브러리가 지원하지 않는 기능에는 액세스할 수 없습니다. 하지만 Unity가 스크립트를 컴파일하는 데 사용하는 표준 .NET 툴은 관리되는 코드에 액세스할 수 있습니다. 따라서 관리되는 플러그인 코드와 Unity 스크립트 코드 간의 사용법에는 큰 차이가 없습니다. 단, 플러그인이 Unity 외부에서 컴파일되어 소스가 사용 가능하지 않을 수 있습니다.

일반적으로 Unity는 프로젝트의 스크립트를 소스 파일로 유지하고 소스가 변경될 때마다 컴파일합니다. 하지만 외부 컴파일러를 사용하여 스크립트를 동적으로 연결된 라이브러리(DLL)에 컴파일할 수도 있습니다. 그런 다음 .dll 파일을 프로젝트에 추가하고, 해당 파일에 포함된 클래스를 일반 스크립트처럼 게임 오브젝트에 연결할 수 있습니다. 컴파일된 DLL은 Unity에서 관리되는 플러그인이라고 부릅니다.

일반적으로 Unity의 DLL보다 스크립트로 작업하는 것이 훨씬 더 쉽습니다. 하지만 Unity가 지원하지 않는 코드에 컴파일러를 사용하거나 .dll 파일에 타사 Mono 코드를 추가하거나, 소스 없는 Unity 코드를 제공해야 할 수 있습니다. Unity 프로젝트에서 .dll 파일을 생성하고 추가하면 이러한 제한 사항을 매우 쉽게 극복할 수 있습니다.

관리되는 플러그인 생성

관리되는 플러그인을 생성하려면 적절한 컴파일러가 필요한 DLL을 생성해야 합니다. .NET 코드를 생성하는 모든 컴파일러가 Unity에서 작동한다고 보장되지 않으므로, 큰 작업을 수행하기 전에 사용 가능한 코드로 컴파일러를 테스트해야 합니다. DLL에 Unity API에 종속된 코드가 포함되어 있지 않으면 적절한 컴파일러 옵션을 사용하여 .dll 파일로 컴파일할 수 있습니다.

Unity API를 사용하려면 Unity의 자체 DLL을 컴파일러에서 사용할 수 있어야 합니다. macOS에서 DLL은 애플리케이션 번들에 포함되어 있습니다. DLL을 확인하려면 컴퓨터에서 Unity.app 파일(Applications/Unity/Hub/Editor/[Version Number]/Unity.app)을 찾은 후 Unity.app을 마우스 오른쪽 버튼으로 클릭하고 Show Package Contents 를 선택하십시오.

macOS에서 Unity DLL의 경로는 다음과 같습니다.

/Applications/Unity/Unity.app/Contents/Managed/UnityEngine

Windows에서 Unity DLL의 경로는 다음과 같습니다.

C:\Program Files\Unity\Editor\Data\Managed\UnityEngine

UnityEngine 폴더에는 필요한 특정 네임스페이스를 얻기 위해 참조할 수 있는 여러 모듈에 대한 .dll 파일이 들어 있습니다. 또한 일부 네임스페이스의 경우 프로젝트 폴더의 디렉토리에 있는 Unity 프로젝트(예: UnityEngine.UI)의 컴파일된 라이브러리 레퍼런스를 필요로 합니다.

~\Library\ScriptAssemblies

DLL을 컴파일할 때의 정확한 옵션은 사용되는 컴파일러에 따라 다릅니다. 예를 들어 Mono C# 컴파일러인 mcs의 커맨드 라인은 macOS에서 다음과 같습니다.

mcs -r:/Applications/Unity/Unity.app/Contents/Managed/UnityEngine/UnityEngine.UIModule.dll -target:library ClassesForDLL.cs

이 예제에서 -r 옵션은 빌드에 포함해야 하는 라이브러리 경로를 지정하며, 위에서는 UnityEngine.UIModule 라이브러리입니다. -target 옵션은 어떤 빌드 타입이 필요한지 지정합니다. “library”라는 단어는 DLL 빌드를 나타내기 위해 사용되었습니다. 마지막으로 컴파일할 소스 파일의 이름은 ClassesForDLL.cs입니다. 컴파일러는 이 파일이 현재 작업 폴더에 있다고 가정하지만, 필요한 경우 전체 경로를 사용하여 파일을 지정할 수 있습니다. 결과로 얻은 .dll 파일은 소스 파일과 같은 폴더에 나타납니다.

관리되는 플러그인 사용

DLL을 컴파일한 후에는 다른 에셋과 마찬가지로 .dll 파일을 Unity 프로젝트로 드래그할 수 있습니다. 관리되는 플러그인에는 라이브러리 내 개별 클래스를 표시하는 데 사용할 수 있는 폴드아웃 삼각형이 있습니다. MonoBehaviour에서 파생된 클래스를 일반 스크립트처럼 게임 오브젝트로 드래그할 수 있습니다. MonoBehaviour가 아닌 클래스를 다른 스크립트에서 직접 일반적인 방식으로 사용할 수 있습니다.

폴드아웃 DLL에 클래스 이름이 표시되어있습니다
폴드아웃 DLL에 클래스 이름이 표시되어있습니다

Visual Studio에 대한 단계별 가이드

이 섹션에서는 간단한 DLL 예제를 빌드하여 Visual Studio와 통합하는 방법을 설명합니다. 또한 DLL 디버깅 세션을 준비하는 방법도 살펴봅니다.

프로젝트(Project) 설정

Visual Studio를 열고 새 프로젝트를 생성하십시오. File > New > Project 를 선택한 후__Visual C# > Class Library__ 를 선택해야 합니다.

새 라이브러리에 대해 다음의 정보를 작성해야 합니다.

  • Name은 네임스페이스입니다(이 예제에서는 DLLTest를 사용).
  • Location은 프로젝트의 부모 폴더입니다.
  • Solution name은 프로젝트의 폴더입니다.

그런 다음 레퍼런스를 Unity DLL에 추가하십시오. Visual Studio의 솔루션 익스플로러에서 References 에 대한 컨텍스트 메뉴를 열고 Add Reference 를 선택하십시오. 그러고 나서 Browse > Select File 을 선택해야 합니다.

이 단계에서는 UnityEngine 폴더에 있는 필수 .dll 파일을 선택하십시오.

코드(Code)

이 예제에서는 솔루션 브라우저에서 클래스 이름을 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에서 DLL 사용

Unity에서 새 프로젝트를 생성하고 빌드한 파일 <project folder>/bin/Debug/DLLTest.dll을 Assets 폴더에 복사합니다. 그런 다음 Assets에서 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));
     }
}

이 스크립트를 씬의 게임 오브젝트에 연결하고 Play를 누르면, Unity는 DLL의 코드 출력을 콘솔 창에 표시합니다.

‘안전하지 않은’ C# 코드 컴파일

안전하지 않은 C# 코드 컴파일에 대한 지원을 활성화하려면 Edit > Project Settings > Player 로 이동한 후 Other Settings 패널을 확장하고 Allow Unsafe Code 체크박스를 선택합니다.

플러그인 인스펙터
네이티브 플러그인