Version: 2023.2
언어: 한국어
네이티브 플러그인
로우레벨 네이티브 플러그인 인터페이스

데스크톱 플랫폼용 플러그인 빌드

데스크톱 플랫폼용 플러그인은 C, C++, Objective C에서 작성할 수 있는 네이티브 코드 라이브러리입니다. 이 페이지에서는 macOS, Windows, Linux용 플러그인에 대해 설명합니다.자세한 내용은 네이티브 플러그인을 참조하십시오.

macOS 플러그인

macOS 플러그인을 번들로 배포하거나 IL2CPP 스크립팅 백엔드를 사용하고 있는 경우 [DllImport("__Internal")] 구문으로 호출할 수 있는 느슨한 C++ 파일을 배포할 수 있습니다.느슨한 C++ 플러그인에 대한 자세한 내용은 IL2CPP용 C++ 소스 코드 플러그인을 참조하십시오.

Xcode를 사용하여 번들 프로젝트를 생성하려면 다음 단계를 따르십시오.

  1. Xcode를 엽니다.
  2. File > New > Project > macOS > Framework & Library > Bundle을 선택합니다.

Xcode를 사용한 작업에 대한 자세한 내용은 Apple의 Xcode에 대한 문서를 참조하십시오.

요구 사항

  • 플러그인을 64비트 아키텍처와 호환되는 유니버설 바이너리로 빌드할 수 있습니다.또는 별도의 dylib 파일을 제공할 수도 있습니다.
  • C++ (.cpp) 또는 Objective-C (.mm)를 사용하여 플러그인을 구현하는 경우 네임 맹글링 문제를 방지하기 위해 C링크에 함수를 선언합니다.
extern "C"
{
  float ExamplePluginFunction ();
}

Windows 플러그인

IL2CPP를 사용하고 있는 경우 Windows의 플러그인은 익스포트된 함수를 가진 .dll 파일이나 느슨한 C++ 파일입니다..dll 파일을 만들어 플러그인을 생성할 수 있는 대부분의 언어와 개발 환경을 사용할 수 있습니다.네임 맹글링 문제를 방지하기 위해 반드시 C링크에 모든 C++ 함수를 선언해야 합니다.

Linux 플러그인

Linux 플러그인은 익스포트된 함수가 있는 .so 파일입니다.이 라이브러리는 일반적으로 C 또는 C++로 작성되지만 다른 언어로도 작성할 수 있습니다.네임 맹글링 문제를 방지하기 위해 반드시 C링크에 모든 C++ 함수를 선언해야 합니다.

Linux용 네이티브 플러그인을 빌드할 때 빌드된 라이브러리에 다른 네이티브 플러그인에 대한 종속성이 있는 경우, 컴파일할 때 해당 라이브러리에 대한 rpath를 지정해야 합니다.

링커 플래그 -Wl, -rpath=$ORIGIN를 추가하여 런타임 검색 경로를 지정합니다.링커 플래그는 로더가 시스템 검색 경로를 검색하는 것 외에 라이브러리의 현재 디렉토리에서 종속성을 찾도록 지시합니다.다른 링커 플래그를 -Wl, -rpath=$ORIGIN와 함께 추가할 수 있지만, Unity는 이를 제어하지 않습니다.예를 들면 /usr/bin/g++ -o binary.c.o -Wl,-rpath=$ORIGIN입니다.

또는 환경에서 LD_LIBRARY_PATH=dependency path를 설정하여 로더가 해당 경로에서 종속성을 검색하도록 지시할 수 있습니다.Linux는 현재 디렉토리에서 종속성을 자동으로 검색하지 않습니다.경로가 잘못되면 Unity 에디터에서 누락 라이브러리 오류가 발생하므로 올바른 종속성 검색 경로를 설정해야 합니다.

Unity 내 플러그인 관리

Unity에서 플러그인 인스펙터는 플러그인을 관리합니다.플러그인 인스펙터에 액세스하려면 프로젝트 창에서 플러그인 파일을 선택합니다. 스탠드얼론 플랫폼의 경우 라이브러리가 호환되는 CPU 아키텍처를 선택할 수 있습니다.크로스 플랫폼 플러그인의 경우 .bundle 파일(macOS용), .dll 파일(Windows용), .so 파일(Linux용)을 포함해야 합니다.Unity는 타겟 플랫폼에 적합한 플러그인을 자동으로 선택하여 플레이어에 포함합니다.자세한 내용은 플러그인 임포트 및 설정을 참조하십시오.

플러그인 인스펙터
플러그인 인스펙터

C# 스크립트에서 플러그인 호출

빌드된 플러그인을 Assets 폴더 또는 Unity 프로젝트에 있는 적절한 아키텍처별 하위 디렉토리에 배치합니다. 그러면 Unity는 C# 스크립트에서 호출할 때 이름으로 플러그인을 찾습니다. 예: [DllImport ("PluginName")] private static extern float ExamplePluginFunction ();

참고: PluginName은 라이브러리 접두사 또는 파일 확장자를 포함해서는 안 됩니다. 예를 들어 플러그인 파일의 실제 이름은 Windows의 경우 PluginName.dll이고 Linux의 경우 libPluginName.so입니다.

예제 플러그인

이러한 프로젝트를 다운로드하고 사용하여 Unity에서 플러그인을 구현하는 방법을 배울 수 있습니다.

  • 가장 간단한 플러그인 예시: 이 프로젝트는 기본 작업을 구현합니다(예: 숫자 출력, 문자열 출력, 두 개의 플로트 추가, 두 개의 정수 추가). 이 프로젝트는 Windows, macOS, Linux 프로젝트 파일을 포함합니다.
  • 네이티브 렌더러 플러그인: 이 플러그인은 모든 정규 렌더링이 완료되어 C++ 코드에서 절차적으로 텍스처를 채운 후 액세스하기 위해 Texture.GetNativeTexturePtr을 사용하여 C++ 코드에서 회전하는 삼각형을 렌더링하는 로우레벨 렌더링 플러그인입니다 이 프로젝트에는 Windows, UWP, macOS, 웹, Android 파일이 포함됩니다.
네이티브 플러그인
로우레벨 네이티브 플러그인 인터페이스