Version: 2023.1
언어: 한국어
플러그인 임포트 및 설정
네이티브 플러그인

관리되는 플러그인

관리되는 플러그인은 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 프로젝트에 추가하는 것이 도움이 되는 상황도 있습니다. 예를 들면 다음과 같은 경우입니다.

  • Unity에서 지원되지 않는 코드에 컴파일러를 사용하려고 합니다.
  • .dll 파일에 타사 .NET 코드를 추가하려고 합니다.
  • 소스 없이 Unity에 코드를 제공하려고 합니다.

이 페이지에서는 관리되는 플러그인을 만드는 데 사용할 수 있는 일반적인 방법과 Visual Studio를 사용하여 관리되는 플러그인을 만들고 디버그 세션을 설정하는 방법을 설명합니다.

관리되는 플러그인 만들기

관리되는 플러그인을 만들려면 DLL을 생성해야 합니다. 그렇게 하려면 다음과 같은 적절한 컴파일러가 필요합니다.

.NET 코드를 생성하는 모든 컴파일러가 Unity와 호환되는 것은 아니므로, 중요한 작업을 수행하기 전에 일부 사용 가능한 코드로 컴파일러를 테스트해야 합니다. DLL을 생성하는 방법은 DLL에 Unity API 코드가 포함되어 있는지 여부에 따라 다릅니다.

  • DLL에 Unity API 코드가 포함된 경우 컴파일하기 전에 Unity 자체 DLL을 컴파일러에서 사용할 수 있도록 해야 합니다.
    1. Unity DLL을 찾으려면 다음 단계를 따릅니다.
      • Windows 경로: C:\Program Files\Unity\Hub\Editor\<version-number>\Editor\Data\Managed\UnityEngine
      • macOS 경로:
        1. 컴퓨터에서 Unity.app 파일을 찾습니다. macOS의 Unity DLL 경로는 /Applications/Unity/Hub/Editor/<version-number>/Unity.app/Contents/Managed/UnityEngine입니다.
        2. Unity.app을 마우스 오른쪽 버튼으로 클릭합니다.
        3. Show Package Contents를 선택합니다.
    2. 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 프로젝트로 드래그할 수 있습니다. 그러고 나서 다음을 수행할 수 있습니다.

  • 관리되는 플러그인을 확장하여 라이브러리 안에 있는 개별 클래스를 확인합니다.
  • MonoBehaviour에서 파생되는 클래스를 게임 오브젝트에 드래그합니다.
  • 다른 스크립트에서 비 MonoBehaviour 클래스를 바로 사용합니다.
확장된 DLL에 클래스 이름이 표시되어 있습니다
확장된 DLL에 클래스 이름이 표시되어 있습니다

Visual Studio로 DLL 만들기

이 섹션에서는 다음을 설명합니다.

  • Visual Studio에서 간단한 DLL 예제를 빌드하고 통합하는 방법
  • Unity에서 DLL에 대한 디버깅 세션을 준비하는 방법

프로젝트 설정

  1. Visual Studio를 열고 새 프로젝트를 만듭니다.
  2. File > New > Project > Visual C# > .Net Standard > Class Library (.NET Standard)를 선택합니다.
  3. 다음 정보를 새 라이브러리에 추가합니다.
    • Name: 네임스페이스(이 예제에서는 DLLTest를 이름으로 사용)
    • Location: 프로젝트의 부모 폴더
    • Solution name: 프로젝트의 폴더
  4. Unity DLL을 스크립트에서 사용할 수 있도록 합니다. Visual Studio의 솔루션 익스플로러에서 References에 대한 컨텍스트 메뉴를 열고 Add Reference > Browse > Select File을 선택합니다.
  5. UnityEngine 폴더에 있는 필수 .dll 파일을 선택합니다.

DLL 코딩

  1. 이 예제의 경우 솔루션 브라우저에서 기본 클래스의 이름을 MyUtilities로 변경합니다.
  2. 해당 코드를 다음으로 교체합니다.
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);
        }
    }
}
  1. 프로젝트를 빌드하여 디버그 심볼과 함께 DLL 파일을 생성합니다.

Unity에서 DLL 디버깅

Unity에서 DLL에 대한 디버깅 세션을 준비하려면 다음 단계를 따르십시오.

  1. Unity에서 새 프로젝트를 생성하고 빌드된 .dll 파일(예: <project folder>/bin/Debug/DLLTest.dll)을 Assets 폴더에 복사합니다.
  2. Assets 폴더에서 Test라는 C# 스크립트를 작성합니다.
  3. 스크립트 콘텐츠를 DLL에서 생성된 클래스의 새 인스턴스를 생성하고, 해당 기능을 사용하고, 콘솔 창에 출력을 표시하는 스크립트로 교체합니다. 예를 들어 위 섹션에서 DLL에 대한 테스트 스크립트를 작성하려면 다음 코드를 복사합니다.
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));
     }
}
  1. 이 스크립트를 씬의 게임 오브젝트에 연결하고 Play를 클릭합니다.

Unity는 콘솔 창에 DLL의 코드 출력을 표시합니다.

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

안전하지 않은 C# 코드는 메모리에 직접 액세스할 수 있는 코드입니다. 기본적으로 비활성화됩니다. 컴파일러가 보안 위험이 발생할지 확인할 수 없기 때문입니다.

안전하지 않은 코드를 사용하여 다음을 수행할 수 있습니다.

  • 포인터를 사용하여 메모리에 액세스합니다.
  • 원시 메모리를 할당합니다.
  • 포인터를 사용하여 메서드를 호출합니다.

안전하지 않은 C# 코드 컴파일에 대한 지원을 활성화하려면 Edit > Project Settings > Player > Other Settings에서 Allow Unsafe Code를 활성화하십시오.

자세한 내용은 안전하지 않은 코드에 대한 Microsoft 문서를 참조하십시오.

플러그인 임포트 및 설정
네이티브 플러그인