Version: 5.6
Windows Store Apps: Missing .NET Types on .NET Scripting Backend
Windows Store Apps: Debugging on .NET Scripting Backend

Windows Store Apps: Plugins on .NET Scripting Backend

관리되는 플러그인

You cannot use Windows Store Apps specific plugins in Unity Editor if you use Windows Runtime APIs (http://msdn.microsoft.com/en-us/library/windows/apps/br211377.aspx), so we changed a bit how Unity Editor handles them. If you intend to use the plugin only for Windows Store Apps and not in Unity editor, you can skip making a placeholder. If you do this, you need to wrap the code which uses the plugin API with the following:

# if !UNITY_EDITOR
// Plugin code
# endif

플레이스홀더가 필요한 경우에는 아래와 같이 두 개의 플러그인을 만들어야 합니다.

  • Unity 에디터용 한 개
  • The other one for Windows Store (Note: We do not support Windows Phone 8.1 silverlight assemblies as plugins for Windows Phone 8.1)

중요 Unity 에디터 플레이스홀더 플러그인은 UnityEditor.dll을 참조할 수 없으며, 참조하는 경우 아래의 오류가 발생합니다.

Assembly UnityEditor는 플러그인이 참조합니다('Assets/Plugins/Plugin.dll'). 하지만 dll 파일은 포함되어서는 안되며, 그렇지 않으면 검색할 수 없게 됩니다.

Both of them must share the same name and have the same assembly version. For example, you should place Editor compatible plugin in Assets\Plugins\MyPlugin.dll, and Windows Store Apps specific plugin in Assets\Plugins\WSA\MyPlugin.dll.

  • Assets\Plugins\MyPlugin.dll에서 에디터를 유일한 호환 플랫폼으로 설정합니다.

  • Go to Assets\Plugins\WSA\MyPlugin.dll, select Windows Store Apps as the only compatible platform, now go to Windows Store Apps plugin settings

  • Pick ‘Assets\Plugins\MyPlugin.dll’ in the placeholder field, this means that when building to Windows Store apps ‘Assets\Plugins\MyPlugin.dll’ will be used when compiling your scripts, but ‘Assets\Plugins\WSA\MyPlugin.dll’ will be copied to final folder instead of ‘Assets\Plugins\MyPlugin.dll’. This achieves two things - Unity Editor will successfully compile your scripts, but during the game you’ll be using API from Windows Store Apps specific plugin.
    Plugin Inspector

Don’t process 옵션

이 옵션은 Unity가 어셈블리를 패치하지 않도록 하는 데 사용되며, 보통 용량이 큰 Windows 런타임 API를 포함하는 플러그인에 대해서 사용됩니다. Unity가 패치를 진행하기 어렵기 때문입니다.

Windows Store Apps Plugin Settings

에디터 탭 옵션
에디터 탭 옵션
프로퍼티: 기능:
SDK Limits plugin to Windows Store Apps built with SDK 8.0 or SDK 8.1.
CPU 플러그인을 32 비트, 64 비트, ARM 플레이어로 제한합니다.
Don’t process (관리된 어셈블리에만 적용)해당 어셈블리 패치를 비활성화합니다. 어셈블리가 Unity가 직렬화 가능한 클래스를 포함하는 경우 패치가 필요합니다. 이러한 경우 추가 IL 코드가 어셈블리에 추가됩니다. 어셈블리에 그러한 클래스가 없다는 것을 아는 경우에는 문제없이 패치를 비활성화할 수 있습니다. 참고: 만일 어셈블리가 패치되지 않은 상태에서 Unity가 런타임 중 직렬화를 시도하는 경우, ’바운드 이탈’과 같은 오류가 발생합니다.
플레이스홀더 (Only applies for managed assemblies). With Windows Store Apps you can have plugins compiled against .NET Core, but because the Unity Editor runs on Mono, it will fail to recognize such assemblies. As a result, C# or JS files won’t be able to reference them. To overcome this, you have to provide an assembly compiled against .NET 3.5 with identical API which would act as a placeholder for the real plugin.

플레이스홀더 예시

예를 들어, 두 개의 어셈블리가 있다고 가정하겠습니다.

  • Plugins\WSA\MyPlugin.dll - Windows 런타임 API가 내부에 있는 상태에서 .NET 코어에 대해 컴파일된 어셈블리.

  • Plugins\MyPlugin.dll - 더미 함수 구현이 있으며 동일한 공용 API를 가지는 .NET 3.5에 대해 컴파일된 어셈블리.

Plugins\WSA\MyPlugin.dll를 클릭한 후, 플레이스홀더를 선택하고 Plugins\MyPlugin.dll를 선택해야 합니다.

이렇게 하면 Unity가 스크립트를 컴파일하면 Plugins\MyPlugin.dll 파일을 참조하지만, Unity가 플러그인을 최종 디렉토리로 복사할 때에는 Plugins\MyPlugin.dll 대신 Plugins\WSA\MyPlugin.dll를 복사하게 됩니다.

Unity가 어셈블리를 패치하지 않으면 어떻게 됩니까?

Unity는 직렬화된 코드를 어셈블리에 추가하며, 따라서 플러그인에는 MonoBehaviour에서 파생된 클래스가 있게 됩니다. Unity가 이를 패치하지 않으면 런타임 도중 직렬화 오류가 발생할 수 있습니다.

Both of them must share the same name. For example, you should place an Editor compatible plugin at Assets\Plugins\MyPlugin.dll, and a Windows Store Apps specific plugin at Assets\Plugins\WSA\MyPlugin.dll. When you’re working in Editor the Assets\Plugins\MyPlugin.dll will be used, and when you’re building to a Windows Store Apps app the Assets\Plugins\WSA\MyPlugin.dll will copied over to the build.

Windows Store Apps: Missing .NET Types on .NET Scripting Backend
Windows Store Apps: Debugging on .NET Scripting Backend