You can use IL2CPP as an alternative to Mono for scripting backend when building projects for Windows Player.
IL2CPP를 사용하여 프로젝트를 빌드하는 경우 Unity는 스크립트의 IL 코드를 변환하고, C++로 다시 조립한 후 네이티브 바이너리를 생성합니다. 자세한 내용은 IL2CPP를 참조하십시오.
You can add C++ (.cpp) code files directly into a Unity Project when using the IL2CPP scripting backend. The C++ files act as plugins within the Plugin Inspector. If you configure the C++ files to be compatible with Windows Player, Unity compiles them together with C++ code that gets generated from managed assemblies.
To view the plugin importer settings for C++ files, click a .cpp file and select the appropriate Windows option in the Platform settings section of the Inspector:
함수들은 생성된 C++ 코드와 연결되어 있으므로 _P/Invoke
를 호출할 별도의 DLL 파일은 없습니다. 이런 이유로 DLL 이름 대신 "__Internal"
키워드를 사용할 수 있으며, 이 경우 다음 예제와 같이 런타임 시점에 함수를 로드하는 대신 C++ 링커가 함수를 확인하는 역할을 맡습니다.
[DllImport("__Internal")]
private static extern int
CountLettersInString([MarshalAs(UnmanagedType.LPWStr)]string str);
You can define this kind of function in NativeFunctions.cpp
as follows:
extern "C" __declspec(dllexport) int __stdcall CountLettersInString(wchar_t* str)
{
int length = 0;
while (*str++ != L'\0')
length++;
return length;
}
Because the linker resolves the function call, any error made in the function declaration on the managed side (C# code that executes under managed run time) produces a linker error instead of a run-time error. This means, no dynamic loading can take place during run time, and the function is called directly from C#, which significantly decreases the performance overhead of a P/Invoke
call.
Unity compiles source code plug-ins with the same C++ compiler arguments as the generated C++ code, which can’t be modified. If some plug-in source code requires control over C++ compiler arguments, you must build a native plug-in instead. For more information, see Native plug-in.
A project using the IL2CPP scripting backend typically produces these files:
The following files are common to projects that use IL2CPP:
파일: | 설명: |
---|---|
a_Data | 게임 데이터가 있는 폴더입니다. |
a.exe | 메인 게임 실행 파일입니다. |
UnityCrashHandler64.exe | 크래시 핸들러 실행 파일입니다. |
UnityPlayer.dll | 모든 네이티브 코드가 포함된 Unity 플레이어 라이브러리입니다. |
WinPixEventRuntime.dll | PIX for Windows runtime. This file is present only in development builds. |
a_BackUpThisFolder_ButDontShipItWithYourGame | 게임 디버깅에 필요한 데이터가 들어 있는 폴더입니다. 여기에는 스크립트에서 생성되는 C++ 코드와 PDB(디버그 정보) 파일이 포함됩니다. 빌드를 배포할 때마다 이 폴더를 백업해야 하지만, 재배포하지는 마십시오. |
GameAssembly.dll | IL2CPP 런타임과 모든 스크립트 코드가 포함된 라이브러리입니다. |
SymbolMap | File containing a list of all managed function addresses and their lengths. IL2CPP needs this to resolve managed stack traces. If you delete it, you can still run your game but there’s no gurantee that exceptions will generate sensible call stacks. |