Version: Unity 6.0 (6000.0)
언어 : 한국어
macOS용 딥 링크
macOS용 빌드 및 배포

macOS에 IL2CPP 사용

IL2CPP(./scripting-backends-il2cpp)를 사용한 macOS 애플리케이션용 플러그인 사용에 대해 설명합니다.

IL2CPP는 완전하게 지원되는 스크립팅 백엔드로, macOS 플레이어용 프로젝트를 빌드할 때 Mono 대신 사용할 수 있습니다.

IL2CPP를 사용하여 프로젝트를 빌드할 때 Unity는 스크립트와 어셈블리의 IL(중간 언어) 코드를 C++ 코드로 전환한 후에 네이티브 바이너리를 생성합니다. 자세한 내용은 IL2CPP를 참조하십시오.

IL2CPP용 C++ 소스 코드 플러그인

IL2CPP 스크립팅 백엔드를 사용하면 C++(.cpp) 코드 파일을 Unity 프로젝트에 직접 추가할 수 있습니다. 이러한 C++ 파일은 인스펙터 내에서 플러그인 역할을 합니다. macOS 플레이어와 호환되도록 C++ 파일을 설정하면 Unity는 관리되는 어셈블리에서 생성되는 C++ 코드와 함께 컴파일합니다. 플러그인 설정에 대한 자세한 내용은 플러그인 임포트 및 설정을 참조하십시오.

생성된 C++ 코드는 함수를 서로 연결하므로 별도의 DLL(동적 링크 라이브러리)이 필요하지 않습니다. DLL 이름을 사용하는 대신 "__Internal" 키워드를 사용하여 런타임 시점에 함수를 로드하는 대신 C++ 링커가 함수를 확인하도록 합니다. 예시:

[DllImport("__Internal")]
private static extern int
CountLettersInString([MarshalAs(UnmanagedType.LPWStr)]string str);

다음과 같이 NativeFunctions.cpp에서 이러한 종류의 함수를 정의할 수 있습니다.

extern "C" __declspec(dllexport) int __stdcall CountLettersInString(wchar_t* str)
{
    int length = 0;
    while (*str++ != nullptr)
        length++;
    return length;
}

링커가 함수 호출을 확인하면 관리되는 쪽의 함수 선언에 오류가 발생하여 런타임 오류가 아닌 링커 오류가 발생합니다. 즉, 런타임 중에 함수가 C#에서 직접 호출되는 동적 로딩이 필요하지 않습니다. 이렇게 하면 P/Invoke 호출의 성능 오버헤드가 감소합니다.

추가 리소스

macOS용 딥 링크
macOS용 빌드 및 배포