跳到主要内容

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以上

环境搭建

image.jpg

游戏发布

  • 进入Unity的Build Setting窗口,选择Windows Store

  • SDK选择Universal10,UAP Build Type选择XAML

image.jpg

注意事项:

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

image.png

image.png

2.路径不要有中文,否则会报错。

使用IL2CPP的方式打包

与IOS原理一致,所以U3D项目只要能出IOS包,就能出Win10的 IL2CPP包,切基本上无须更改业务代码。Player Setting设置注意事项:

  • 勾选Run In Backgroung,这个影响PC版本在后台的运行行为

image.png

  • 这里设置IL2CPP

image.png

  • 输出的IL2CPP项目

  • 工程生成完毕后用VS2015打开.sln文件即可

UWP工程介绍

Unity引擎提供了直接导出UWP项目的功能,在导出的工程中包含3个项目:

image

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之间通信简介

image

  • 插件使用方法:

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

image

2.交互在U3D中有两个方法,在UWP工程中也有两个方法,分别是传出方法与收到回调处理方法。在U3D中的传UWP工程的方法为InterOp.SendMessageToNative(0,""),通过Fun_OnReceiveNativeMessage()方法来接收UWP工程传入的相应索引值以及字符串。

3.插件导入后,可能会在U3D高版本中报错,在低版本的plugins中可以加入X86,X64,arm三个平台的相同的InterOp.dll,但是2017不可以,必须要选择对应的平台,平台选择已经不同但是还会在游戏中报错,可以忽略这个报错。

image

  • 在win10平台出工程后打开.sln工程,通常是三步操作。

    1.添加对MGSDK的引用,右键找到->添加 ->添加引用。

    2.然后把ILC2PP文件中的InterOpImplement.cpp和InterOpImplement.h中导入到工程中(通过引用现有文件)。

    3.通过ReceivedMessage接收到从U3D传来的索引值,然后在相应的索引值中加入自己想要调用的广告,做完在UWP工程中的处理后通过SendMessageToU3D来向U3D回传索引值。

    Unity与UWP之间通信实际操作步骤:

  • 需要首先注册来自Native代码的接收处理函数
    image

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

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

  • 使用例子是MainPage.xaml.h和MainPage.xaml.cpp。
    image

  • 这个脚本的40行以后,添加定义:
    image

  • 对应MainPage.xaml.cpp的代码在第28行:
    image

  • 61-63行需要注册接收U3D消息的处理函数(注意接收的处理函数是在U3D线程执行的,有时需要转到Native主线程执行):
    image

  • 209行之后:
    image

  • 版本移植完成后就可以在UWP工程中接入MG Ads UWP SDK。

  • 开发者接入MG Ads UWP SDK。【MG Ads UWP SDK下载

预计工期

项目内容工时(单人时)
环境搭建搭建开发环境5
转版本将游戏工程导出UWP版本,修改出现的接口异常20
适配平台游戏适配UWP平台,修复游戏在UWP平台上出现的适配问题30
接入MGSDK接入MGSDK的登陆、计费、广告、社区等功能5
合计60