Unity는 C, C++, Objective-C 등으로 작성한 네이티브 코드의 라이브러리인 네이티브 플러그인 을 폭넓게 지원합니다. 플러그인은 (JavaScript 또는 C#로 작성한) 게임 코드가 이런 라이브러리에서 함수를 호출하게 해줍니다. Unity를 미들웨어 라이브러리나 기존의 C/C++ 게임 코드와 통합시키는 기능입니다.
네이티브 플러그인을 사용하려면 원하는 기능에 액세스하고 이를 라이브러리에 컴파일링하도록 C 기반 언어로 함수를 작성해야 합니다. Unity에서는 네이티브 라이브러리에서 함수를 호출하는 C# 스크립트도 만들어야 합니다.
네이티브 플러그인은 C# 스크립트가 다른 사용자 스크립트에 노출되는 단순한 C 인터페이스를 제공해야 합니다. 또 낮은 레벨의 렌더링 이벤트가 발생했을 때(가령 그래픽스 기기의 생성), Unity는 네이티브 플러그인으로 내보낸 함수를 호출할 수 있습니다. 자세한 내용은 네이티브 플러그인 인터페이스 페이지를 참조하십시오.
단일 함수를 가진 매우 간단한 네이티브 라이브러리는 다음과 같이 보이는 소스 코드를 가집니다.
float FooPluginFunction () { return 5.0F; }
Unity에서 코드에 액세스하려면 다음의 코드를 사용할 수 있습니다.
using UnityEngine;
using System.Runtime.InteropServices;
class SomeScript : MonoBehaviour {
#if UNITY_IPHONE
// On iOS plugins are statically linked into
// the executable, so we have to use __Internal as the
// library name.
[DllImport ("__Internal")]
#else
// Other platforms load plugins dynamically, so pass the name
// of the plugin's dynamic library.
[DllImport ("PluginName")]
#endif
private static extern float FooPluginFunction ();
void Awake () {
// Calls the FooPluginFunction inside the plugin
// And prints 5 to the console
print (FooPluginFunction ());
}
}
Javascript를 사용할 때는 DLLName이 작성한 플러그인의 이름인 다음 구문을 활용하거나 정적으로 링크된 네이티브 코드를 작성하는 경우에는 “Internal”을 사용해야 합니다.
@DllImport (DLLName)
static private function FooPluginFunction () : float {};
일반적으로 플러그인은 타겟 플랫폼에서 네이티브 코드 컴파일러로 빌드됩니다. 플러그인 함수는 C 기반의 호출 인터페이스를 사용하므로 C++ 또는 Objective-C를 사용할 때 네임 맹글링 문제를 피해야 합니다.