Unity는 C/C++로 작성되고 공유 라이브러리(.so) 또는 정적 라이브러리(.a)로 패키지화된 Android용 네이티브 플러그인을 지원합니다. IL2CPP 스크립팅 백엔드를 사용하는 경우 C/C++ 소스 파일을 플러그인으로 사용하면 IL2CPP 생성 파일과 함께 컴파일됩니다. 여기에는 확장자가 .c, .cc, .cpp 및 .h인 모든 C/C++ 소스 파일이 포함됩니다.
Android용 C++ 플러그인을 빌드하려면 Android NDK를 사용하고 공유 라이브러리 빌드를 위해 필요한 단계에 익숙해져야 합니다. 이는 정적 라이브러리의 경우도 마찬가지입니다.
C++를 사용하여 플러그인을 구현하는 경우 이름 맹글링 문제를 피하기 위해 C 링크로 메서드를 선언해야 합니다. 기본적으로 플러그인에서 .c 파일 확장자가 있는 C 소스 파일만 C 링크를 갖습니다(C++는 해당 안 됨).
extern "C" {
float Foopluginmethod ();
}
라이브러리를 빌드한 후 출력 .so 파일을 Unity 프로젝트에 복사합니다. 인스펙터에서 .so 파일을 Android와 호환되도록 표시하고 드롭다운 상자에 필요한 CPU 아키텍처를 설정합니다.
C# 스크립트에서 네이티브 플러그인의 메서드를 호출하려면 다음 코드를 사용합니다.
[DllImport ("pluginName")]
private static extern float Foopluginmethod();
참고: pluginName에는 접두어(‘lib’) 또는 파일 이름의 확장자(‘.so’)가 포함되어서는 안됩니다. 모든 네이티브 플러그인 메서드 호출을 추가 C# 코드 레이어로 래핑하는 것이 좋습니다. 이 코드는 Application.platform을 확인하고 앱이 실제 디바이스에서 실행될 때만 네이티브 메서드를 호출합니다. 더미 값은 에디터에서 실행할 때 C# 코드에서 반환됩니다. 플랫폼 정의를 사용하여 플랫폼 종속 코드 컴파일을 제어합니다.
C/C++ 소스 파일을 플러그인으로 사용하면 플러그인 이름에 __Internal
을 사용하는 경우를 제외하고 동일한 방식으로 C#에서 호출합니다. 아래의 예제를 참조하십시오.
[DllImport ("__Internal")]
private static extern float Foopluginmethod();
AndroidNativePlugin.unitypackage 압축 파일은 Unity 패키지로 배포된 간단한 네이티브 코드 플러그인 예제를 포함합니다.
이 샘플은 Unity 애플리케이션에서 C++ 코드가 어떻게 호출되는지 보여줍니다. 패키지는 네이티브 플러그인에 의해 계산된 두 값의 합계를 표시하는 씬을 포함합니다. 플러그인을 컴파일하려면 Android NDK를 설치해야 합니다.
예제를 설치하려면 다음 단계를 따르십시오.