Unity引擎转UWP项目移植UWP
简介
本方案为 Unity 游戏移植至 Windows UWP 平台提供了一套完整的工程实践指南。我们将引导您完成开发环境配置、项目发布设置,并解决移植过程中常见的技术问题,最终通过微软商店实现跨 PC 与 Xbox 设备的分发。
本文适用于Unity3D v5.2及以上所有版本
环境要求
-
系统必须是Windows 10 RTM版本10240及以上版本
-
必须安装Visual Studio 2015或Visual Studio 2017或Visual Studio 2019或Visual Studio 2022
-
Unity安装版本要求最低为5.2.0以上
环境搭建
-
系统安装Windows 10 RTM版本10240及以上版本
-
安装Visual Studio,出面以Visual Studio 2015为例。下载地址:https://www.visualstudio.com/downloads/download-visual-studio-vs
-
安装的时候需要安装Windows 10的SDK

游戏发布
-
进入Unity的Build Setting窗口,选择Windows Store
-
SDK选择Universal10,UAP Build Type选择XAML

注意事项:
1.在U3D的2017以及更高版本后需要选择自己的打包时的WIN10SDK版本。一定要记得选择SDK的版本和后面的平台, 版本推荐高于393,否则可能会报版本错误。


2.路径不要有中文,否则会报错。
使用IL2CPP的方式打包
与IOS原理一致,所以U3D项目只要能出IOS包,就能出Win10的 IL2CPP包,切基本上无须更改业务代码。Player Setting设置注意事项:
- 勾选Run In Backgroung,这个影响PC版本在后台的运行行为
- 这里设置IL2CPP

-
输出的IL2CPP项目
-
工程生成完毕后用VS2015打开.sln文件即可
UWP工程介绍
Unity引擎提供了直接导出UWP项目的功能,在导出的工程中包含3个项目:

1.Il2CppOutputProject工程:通过IL2CPP将Unity的C#代码转换成C++代码。值得注意的是,这不是直接从C#到C++的一对一转换,而是经过了中间语言层的转换,这有助于保护源代码不被轻易反编译。
2.GameNameX (Universal Windows)工程:这是UWP应用程序的框架或容器,用于整合和运行由Unity生成的游戏内容。开发者需要在此工程中接入MG Ads SDK。
3.Unity Data工程:这部分包含了UWP的配置文件,包含UWP和IL2Cpp的通信组件,是游戏运行不可或缺的一部分。
在导出的UWP项目中,Il2CppOutputProject是唯一与Unity紧密相关的部分。开发者可以选择将这个项目编译成DLL,然后在UWP应用中作为外部库引用。这一做法不仅简化了UWP项目的结构,还因为C++编译后的DLL具有较高的安全性,难以被反编译,从而保护了游戏的源代码的安全。【如何编译il2cpp工程】
为了完成整个UWP游戏的构建流程,开发者需要提交完整的UWP项目,包括上述三个组成部分。随后,项目将在指定的机器上进行编译,生成最终的可分发UWP包,以便在Windows 10 Store上发布或通过其他途径分发给用户。
Unity与UWP之间通信简介
- 对于解决Unity以IL2CPP的方式迁移到UWP存在的通讯问题我们提供了相应的插件。【IL2CPP通信】【IL2CPP通信unity用插件(内附DEMO及说明)】插件结构如下(该项目为IL2CPPDemo,U3D版本5.4.4p4,代码使用范例是V_Main脚本。):

-
插件使用方法:
1.需要一个对象来挂载V_Main.cs,ActionHelper.cs,ThreadDispatcherUtils.cs总共3个脚本代码并且保证此物体不被销毁。

2.交互在U3D中有两个方法,在UWP工程中也有两个方法,分别是传出方法与收到回调处理方法。在U3D中的传UWP工程的方法为InterOp.SendMessageToNative(0,""),通过Fun_OnReceiveNativeMessage()方法来接收UWP工程传入的相应索引值以及字符串。
3.插件导入后,可能会在U3D高版本中报错,在低版本的plugins中可以加入X86,X64,arm三个平台的相同的InterOp.dll,但是2017不可以,必须要选择对应的平台,平台选择已经不同但是还会在游戏中报错,可以忽略这个报错。

-
在win10平台出工程后打开.sln工程,通常是三步操作。
1.添加对MGSDK的引用,右键找到->添加 ->添加引用。
2.然后把ILC2PP文件中的InterOpImplement.cpp和InterOpImplement.h中导入到工程中(通过引用现有文件)。
3.通过ReceivedMessage接收到从U3D传来的索引值,然后在相应的索引值中加入自己想要调用的广告,做完在UWP工程中的处理后通过SendMessageToU3D来向U3D回传索引值。
Unity与UWP之间通信实际操作步骤:
-
需要首先注册来自Native代码的接收处理函数

-
需使用InterOp.SendMessageToNative(intmessageID, string message)函数就可以向Native代码发送消息,并获得返回值。

-
在主项目中添加InterOpImplement.h和InterOpImplement.cpp两个脚本

-
使用例子是MainPage.xaml.h和MainPage.xaml.cpp。
-
这个脚本的40行以后,添加定义:

-
对应MainPage.xaml.cpp的代码在第28行:
-
61-63行需要注册接收U3D消息的处理函数(注意接收的处理函数是在U3D线程执行的,有时需要转到Native主线程执行):
-
209行之后:

-
版本移植完成后就可以在UWP工程中接入MG Ads UWP SDK。
-
开发者接入MG Ads UWP SDK。【MG Ads UWP SDK下载】
预计工期
| 项目 | 内容 | 工时(单人时) |
|---|---|---|
| 环境搭建 | 搭建开发环境 | 5 |
| 转版本 | 将游戏工程导出UWP版本,修改出现的接口异常 | 20 |
| 适配平台 | 游戏适配UWP平台,修复游戏在UWP平台上出现的适配问题 | 30 |
| 接入MGSDK | 接入MGSDK的登陆、计费、广告、社区等功能 | 5 |
| 合计 | 60 |