Version: 2023.1
언어: 한국어
Windows 무결성 제어
Windows 빌드 설정

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

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

IL2CPP를 사용하여 프로젝트를 빌드하는 경우 Unity는 스크립트의 IL 코드를 변환하고, C++로 다시 조립한 후 네이티브 바이너리를 생성합니다. 자세한 내용은 IL2CPP를 참조하십시오.

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

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

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

C++ 파일용 플러그인 임포터 설정
C++ 파일용 플러그인 임포터 설정

함수들은 생성된 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++ 컴파일러 인자를 제어해야 하는 경우 대신 네이티브 플러그인을 빌드해야 합니다.자세한 내용은 네이티브 플러그인을 참조하십시오.

IL2CPP 빌드 파일

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

빌드 중에 생성되는 IL2CPP 파일
빌드 중에 생성되는 IL2CPP 파일

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

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

추가 리소스:

Windows 무결성 제어
Windows 빌드 설정