# Windows 플레이어: IL2CPP 스크립팅 백엔드

> Use IL2CPP with Windows Player and add compatible C++ source code plug-ins to your build.

Windows 플레이어용 프로젝트를 빌드할 때 스크립팅 백엔드에 Mono 대신 IL2CPP를 사용할 수 있습니다.

IL2CPP를 사용하여 프로젝트를 빌드하는 경우 Unity는 스크립트의 IL 코드를 전환하고, C++로 다시 조립한 후 네이티브 바이너리를 생성합니다. 자세한 내용은 [IL2CPP](/engine/6000.0/manual/scripting/compilation-and-code-reload/backends/il2cpp.md)를 참조하십시오.

## IL2CPP용 C++ 소스 코드 플러그인##c++-source-code-plugins-for-il2cpp

[IL2CPP](/engine/6000.0/manual/scripting/compilation-and-code-reload/backends/il2cpp.md) 스크립팅 백엔드를 사용할 때 C++(.cpp) 코드 파일을 Unity 프로젝트에 직접 추가할 수 있습니다. C++ 파일은 플러그인 인스펙터 내에서 플러그인 역할을 합니다. C++ 파일을 Windows 플레이어와 호환되도록 설정하면 Unity는 관리되는 어셈블리에서 생성되는 C++ 코드와 함께 컴파일합니다.

C++ 파일에 대한 플러그인 임포터 설정을 확인하려면 .cpp 파일을 클릭하고 인스펙터의 Platform settings 섹션에서 적절한 **Windows** 옵션을 선택합니다.


**C++ 파일용 플러그인 임포터 설정:**
![](/api/media?file=/engine/6000.0/media/images/PlatformIL2CPPPlatformSettings.png)

함수는 생성된 C++ 코드와 연결되어 있으므로 `_P/Invoke`를 호출할 별도의 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++ != L'\0')
        length++;
    return length;
}
```

링커가 함수 호출을 확인하기 때문에 관리되는 측(관리되는 런타임에서 실행되는 C# 코드)의 함수 선언에 발생하는 오류는 런타임 오류가 아닌 링커 오류를 생성합니다. 즉, 런타임 중에 동적 로딩이 발생할 수 없으며 함수는 C#에서 직접 호출되므로 `P/Invoke` 호출의 성능 오버헤드가 크게 감소합니다.

Unity는 생성된 C++ 코드와 동일한 C++ 컴파일러 인자로 소스 코드 플러그인을 컴파일하며 수정할 수 없습니다. 일부 플러그인 소스 코드에 C++ 컴파일러 인자를 제어해야 하는 경우 네이티브 플러그인을 대신 빌드해야 합니다. 자세한 내용은 [네이티브 플러그인](/engine/6000.0/manual/scripting/compilation-and-code-reload/plug-ins/native.md)을 참조하십시오.

## IL2CPP 빌드 파일##il2cpp-build-files

IL2CPP 스크립팅 백엔드를 사용하는 프로젝트는 일반적으로 다음 파일을 생성합니다.


**빌드 중에 생성된 IL2CPP 파일:**
![](/api/media?file=/engine/6000.0/media/images/IL2CPPBuildProducedFiles.png)

다음 파일은 IL2CPP를 사용하는 프로젝트에 공통적으로 생성됩니다.

| **파일:**                                            | **설명:**                                                                                                                         |
| -------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| **a\_Data**                                        | 게임 데이터가 있는 폴더입니다.                                                                                                               |
| **a.exe**                                          | 메인 게임 실행 파일입니다.                                                                                                                 |
| **UnityCrashHandler64.exe**                        | 크래시 핸들러 실행 파일입니다.                                                                                                               |
| **UnityPlayer.dll**                                | 모든 네이티브 코드가 포함된 Unity 플레이어 라이브러리입니다.                                                                                            |
| **WinPixEventRuntime.dll**                         | Windows 런타임용 PIX입니다. 이 파일은 개발 빌드에만 있습니다.                                                                                        |
| **a\_BackUpThisFolder\_ButDontShipItWithYourGame** | PDB(디버그 정보) 파일 및 스크립트에서 생성된 C++ 코드 등 게임 디버깅에 필요한 데이터가 포함된 폴더입니다. 전송하는 모든 빌드에 대해 이 폴더를 백업해야 하지만 재배포하지 마십시오.                      |
| **GameAssembly.dll**                               | IL2CPP 런타임과 모든 스크립트 코드가 포함된 라이브러리입니다.                                                                                           |
| **SymbolMap**                                      | 관리되는 모든 함수 주소와 해당 길이의 리스트가 포함된 파일입니다. 관리되는 스택 추적을 확인하려면 IL2CPP에 이 파일이 필요합니다. 삭제하면 게임을 계속 실행할 수 있지만 예외로 인해 적절한 호출 스택이 생성되지 않습니다. |

## 추가 리소스:##additional-resources:

* [플러그인 인스펙터](/engine/6000.0/manual/scripting/compilation-and-code-reload/plug-ins/plug-in-inspector.md)
* [IL2CPP](/engine/6000.0/manual/scripting/compilation-and-code-reload/backends/il2cpp.md)
* [P/Invoke 사용](https://docs.unity3d.com/Manual/uwp-pinvoke.html)
