이 페이지에서는 데스크톱 플랫폼(Windows/Mac OS X/Linux)용 네이티브 코드 플러그인에 대해 설명합니다.
Mac OSX에서 플러그인은 번들로 배포됩니다. File->NewProject… 를 선택한 후 (xCode 3에 있는)Bundle -> Carbon/Cocoa Loadable Bundle 또는 (xCode 4에 있는)OS X -> Framework & Library -> Bundle 을 선택하여 XCode로 번들 프로젝트를 생성할 수 있습니다.
C++ (.cpp) 또는 Objective-C (.mm)를 사용하여 플로그인을 실행할 경우 네임 맹글링(name mangling) 문제를 피하기 위해 함수가 C 링크에 선언되어 있는지 확인해야 합니다.
extern "C" {
float FooPluginFunction ();
}
Windows에 있는 플러그인은 익스포트된 함수가 있는 DLL 파일입니다. DLL 파일을 생성할 수 있는 모든 언어 및 개발 환경에서 플러그인을 생성할 수 있습니다. Mac OSX와 마찬가지로 네임 맹글링 문제를 피하기 위해 C링크에 C++ 함수를 선언해야 합니다.
Linux 플러그인은 익스포트 함수가 있는 .so
파일입니다. 이 라이브러리는 일반적으로 C 또는 C++로 작성되지만 다른 언어로도 작성할 수 있습니다.
다른 플랫폼에서와 마찬가지로 네임 맹글링 문제를 피하기 위해 C링크에 C++ 함수를 선언해야 합니다.
32비트 및/또는 64비트 플러그인을 필요로 하는 문제는 플랫폼에 따라 해결 방식이 달라집니다.
Windows와 Linux에서 플러그인은 수동으로 관리할 수 있습니다(예를 들어, 64비트 플레이어를 빌드하기 전에 64비트 라이브러리를 Assets/Plugins
폴더에 복사해야 하며 32비트 플레이어를 빌드하기 전에 32비트 라이브러리를 Assets/Plugins
폴더에 복사해야 합니다). 또는 32비트 버전 플러그인을 Assets/Plugins/x86
에 배치하거나 64비트 버전 플러그인을 Assets/Plugins/x86_64
에 배치할 수 있습니다. 디폴트로 에디터는 아키텍처 특유의 하위 디렉토리를 먼저 살핀 후 해당 디렉토리가 없을 경우 루트 Assets/Plugins
폴더에서 플러그인을 복사합니다.
유니버설 Linux 빌드 시 아키텍처 특유의 하위 디렉토리를 사용해야 한다는 점을 유의하시기 바랍니다(유니버설 Linux 빌드를 빌드할 때 에디터는 루트 Assets/Plugins
폴더에서 플러그인을 복사하지 않습니다).
Mac OS X의 경우 플러그인을 32비트 아키텍처와 64비트 아키텍처를 포함하는 유니버설 바이너리로 빌드해야 합니다.
번들이 빌드되면 Unity 프로젝트의 Assets->Plugins 폴더(또는 적절한 아키텍처 특유의 하위 디렉토리)에 배치해야 합니다. 이와 같은 함수를 C# 스크립트에 정의할 때 Unity는 이름으로 함수를 찾습니다.
[DllImport ("PluginName")]
private static extern float FooPluginFunction ();
PluginName 은 라이브러리 접두사와 파일 확장자를 포함할 필요가 없습니다. 예를 들어 플러그인 파일의 실제 이름은 Windows의 경우 PluginName.dll, Linux의 경우 libPluginName.so입니다. 플러그인 코드를 바꿀 때마다 프로젝트의 스크립트를 다시 컴파일해야 하며, 그렇지 않을 경우 플러그인에 컴파일된 코드는 최신이 아니게 됩니다.
크로스 플랫폼 플러그인의 경우 플러그인 폴더에 .bundle 파일(Mac용), .dll 파일(Windows용), 그리고 .so 파일(Linux용)을 포함해야 합니다. 그 후 해야 하는 추가 작업은 없습니다. Unity는 대상 플랫폼에 맞는 플러그인을 자동으로 선택하여 플레이어에 포함합니다.
이 플러그인 프로젝트는 일부 매우 기본적인 기능(숫자 출력, 스트링 출력, 두 개의 플로트 추가, 두 개의 정수 추가)만을 제공합니다. Unity 플러그인이 처음일 경우 이 예시가 매우 유용할 겁니다. 프로젝트는 여기에서 찾을 수 있으며, Windows용, Mac용, 그리고 Linux용 프로젝트 파일이 포함되어 있습니다.
멀티 스레드 렌더링과 작동하는 멀티 플랫폼 예시는 네이티브 플러그인 인터페이스 페이지에서 찾을 수 있습니다.