# 네이티브 플러그인

> Details on using native plug-ins.

Unity는 C, C++, Objective-C 같은 언어로 작성할 수 있는 네이티브 코드의 라이브러리인 네이티브 플러그인을 지원합니다. 플러그인을 사용하면 C#으로 작성한 코드가 이러한 라이브러리에서 함수를 호출할 수 있습니다. 이 기능을 사용하면 Unity를 미들웨어 라이브러리나 기존 C 및 C++ 코드와 통합할 수 있습니다.

네이티브 플러그인은 간단한 C 인터페이스를 제공하며, C# 스크립트는 이를 다른 스크립트에 노출합니다. 또한 Unity는 특정 로우레벨 렌더링 이벤트가 발생할 때(예: 그래픽스 기기를 생성하는 경우) 네이티브 플러그인이 익스포트하는 함수를 호출할 수도 있습니다. 자세한 내용은 [로우레벨 네이티브 플러그인 인터페이스](/engine/6000.0/manual/scripting/compilation-and-code-reload/plug-ins/native-plugin-interface.md)를 참조하십시오.

네이티브 플러그인의 예시는 [네이티브 렌더러 플러그인](https://github.com/Unity-Technologies/NativeRenderingPlugin)을 참조하십시오.

## 네이티브 플러그인 사용

네이티브 플러그인을 사용하려면 다음 단계를 수행하십시오.

1. C 기반 언어로 함수를 작성하여 필요한 기능에 액세스합니다.
2. 이를 라이브러리에 컴파일합니다.
3. Unity에서 네이티브 라이브러리의 함수를 호출하는 C# 스크립트를 생성합니다.

타겟 플랫폼에서 네이티브 코드 컴파일러로 네이티브 플러그인을 빌드합니다. 플러그인 함수가 C 기반 호출 인터페이스를 사용하므로 네임 맹글링 문제를 피하기 위해 함수를 C 링크로 선언해야 합니다.

## 예제

단일 함수를 가진 간단한 네이티브 라이브러리는 다음과 같은 소스 코드를 가집니다.

`float ExamplePluginFunction () { return 5.0F; }`

Unity에서 이 코드에 액세스하려면 다음의 C# 스크립트를 사용하십시오.

```lang-C#
using UnityEngine;
using System.Runtime.InteropServices;

class ExampleScript : 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 ExamplePluginFunction ();

    void Awake () {
		// Calls the ExamplePluginFunction inside the plugin
		// And prints 5 to the console
		print (ExamplePluginFunction ());
       }
    }
```

## 추가 리소스

* [로우레벨 네이티브 플러그인 인터페이스](/engine/6000.0/manual/scripting/compilation-and-code-reload/plug-ins/native-plugin-interface.md)
* [네이티브 라이브러리와 모노 상호 운용](https://www.mono-project.com/docs/advanced/pinvoke/)
* [MSDN의 P-invoke 기술 자료](https://docs.microsoft.com/en-us/dotnet/framework/interop/marshaling-data-with-platform-invoke?redirectedfrom=MSDN)
