이 페이지에서는 데스크톱 플랫폼(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용 프로젝트 파일이 포함되어 있습니다.
멀티 스레드 렌더링과 작동하는 멀티 플랫폼 예시는 네이티브 플러그인 인터페이스 페이지에서 찾을 수 있습니다.
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.