Unity 游戏移植到 Windows10 之路 — 环境搭建

Windows10 是微软公司最新一代的跨平台及设备应用的操作系统。它统一了包括个人电脑、平板电脑、智慧型手机、嵌入式系统、Xbox One以及新产品Surface Hub和HoloLens等等的整个Windows产品系列的作业系统,共享一个通用的应用程式架构(UWP)和Windows Store的生态系统。随着今年的7-29 号Windows10发布大会的召开,目前微软已经开始向全球用户推送Windows10 系统,在未来的一年内所有用户都将能免费升级。 虽然Unity引擎的官方正式版本5.1.x,目前尚未支持Windows10平台,但5.2 Beta版本从一开始(即5.2b1)就已经全面支持Windows10平台。这里笔者根据自己的经验,使用Unity 5.2b5版本,给大家简单介绍一下如何搭建开发Windows10 的Unity游戏的环境。   一、开发环境 1. 首先开发者必须把系统升级到Windows10 RTM版本。 2. 然后当然是安装Visual Studio 2015,目前官方提供免费的community版本:     https://www.visualstudio.com/downloads/download-visual-studio-vs 3. 需要注意的是一定要安装Windows10 的SDK,即勾选下方黄框的选项。     4. 安装Unity5.2Beta版本:     http://unity3d.com/unity/beta   二、发布Win10工程 1.  使用任何一个游戏项目,笔者使用Unity Store上畅销的3D打飞机游戏– Space Shooter。     2.  发布游戏的Win10工程。 在5.2版本的Unity的Build Setting窗口中,大家已经可以看到Win10的选项。具体是在Windows Store的平台下,SDK选择为Universal 10,UAP Build Type选择为XAML,这样就可以生成Win10 UWP架构的游戏工程。     3.  打开Win10的工程,可惜这个新工程是编译不过的。错误信息如下: 1>C:\Program Files…

0

商店应用的WACK问题 — Cocos2dx 游戏移植到 Windows Phone8 之通用应用篇

  Universal Windows App即通用窗口应用是微软2014年推出的最重要的技术之一。在全新8.1的Windows XAML app framework下,使用统一的 Windows 运行时和 Visual Studio IDE 同时针对所有 Windows 设备进行开发(包括Windows Phone),真正做到一套代码全平台共用,极大地提高了开发效率,节省开发成本。 针对最近有开发者反馈在Cocos2dx最新的Universal工程中存在Windows Store应用无法提交商店审核的问题,文本在此做一个统一的说明。   目前能够开发Windows Store应用的Cocos2dx的工程通常有二种类型:proj.winrt、proj.win8.1-universal。前者是比较旧的非通用应用的工程,存在于2.x版本中。后者就是通用应用工程,存在于3.x版本。无论哪种类型,工程的CPU平台一般都有三种:ARM、Win32和x64。如果打开Visual Studio,可以从工具栏中发现CPU的选项: 针对不同的设备,开发者需要在各自对应的CPU中进行切换。目前存在的问题和CPU平台有关,主要有二类: 1.  Cocos2dx所有版本在x64平台上全部编译出错 x64平台上3.x版本handleTouch类的函数有参数类型转换的错误,还有link方面的错误:     X64平台的2.x版本有link方面的错误: 2.  Cocos2dx 3.3-3.5版本在Win32平台上商店审核出错 (注:所有错误都只针对Windows Store的应用,Windows Phone的应用不存在错误)    下面是解决方法: 1.  Windows Store 应用的64位CPU平台(即x64)的版本还在开发中,所以目前确实无法编译通过。可以使用32位CPU平台(即Win32)代替,用于Surface Pro 、笔记本这样的设备。   2.  在提交Win32平台的商店应用审核时,请先用WACK(Windows App Certification Kit)测试,选项画面见下图: 在3.3-3.5版本中如何出现类似”APIs are not the part of…

0

快速过渡到 Universal App — Cocos2dx 游戏移植到 Windows Phone8 之通用应用篇

Universal Windows App即通用窗口应用是微软2014年推出的最重要的技术之一。在全新8.1的Windows XAML app framework下,使用统一的 Windows 运行时和 Visual Studio IDE 同时针对所有Windows 设备进行开发(包括Windows Phone),真正做到一套代码全平台共用,极大地提高了开发效率,节省开发成本。进一步的知识大家可以参考如下链接: http://dev.windows.com/zh-cn/develop/building-universal-windows-apps/ http://www.cnblogs.com/sonic1abc/p/3772693.html Cocos2dx的最新版本提供了对于Universal Windows App(以下简称UAP)的支持。针对这个全新的开发模式,很多开发者还不是太熟悉。所以本文罗列了一些基本信息,帮助大家快速过渡。 1. Cocos2dx支持UAP的版本: 3.x的话:需要3.3版本 2.x的话:官网版本尚不支持UAP,需要MSOpenTech分支的2.2.5版本 2.获取支持UAP的Cocos2dx代码: 3.x的话:直接从官网下载3.3版本即可:http://www.cocos2d-x.org/download 2.x的话:从MSOpenTech的GitHub上获取,具体步骤如下所示: Git clone https://github.com/MSOpenTech/cocos2d-x.git cd cocos2d-x git checkout v2-universal git submodule update –init download-deps.py  (should be downloading from msopentech and not cocos2d)   3.系统要求: 安装 Visual Studio 2013 Update 4    4.创建支持UAP工程: 方法和以前完全相同,不需要特别的步骤 3.x版本:…

2

MP3之痛 — Cocos2dx 游戏移植到 WP8 之路

Cocos2dx 是目前最流行的手机游戏引擎之一,开源、轻量、多平台等的诸多特性使得它被很多国内外手游开发者所喜爱。利用Cocos2dx来开发Windows Phone 8的游戏同样也是非常的方便高效。当然任何跨平台的游戏引擎,最终解决的都只能是游戏层面的问题:包括场景的管理、图形的渲染、真实物理世界的模拟等;要想真正在一个平台上把游戏做好,不可避免会遇到很多和平台相关的问题,需要我们每个游戏程序员对于该平台的技术有个比较深入的了解。在Windows Phone 8这个平台上,我希望通过自己的努力帮助大家解决移植过程中遇到的问题。 这一次我们来聊聊mp3音乐播放的问题。在游戏中播放音乐,大家一般使用Cocos2dx自带的CocosDenshion音乐引擎。使用方法相当简单,步骤如下: 工程中加入CocosDension引擎 (WP8的目录在cocos2d\cocos\audio\proj.wp8) WinRT工程加入CocosDension的库引用 代码中加入必要的H文件和namespace #include”SimpleAudioEngine.h” using namespace CocosDenshion; 播放BGM的代码 SimpleAudioEngine::sharedEngine()->playBackgroundMusic(“xxx”, true); 播放SE的代码 SimpleAudioEngine::sharedEngine()->preloadEffect(“xxx”); SimpleAudioEngine::sharedEngine()->playEffect(“xxx”);             (注1) 采用上述方法,我们可以很顺利地播放wav格式的音乐。但美中不足的是,因为版权的原因Windows Phone 8的平台上默认是不支持mp3格式音乐的播放的,所以CocosDenshion音乐引擎在WP8平台上对mp3格式的文件做了屏蔽。做一下如下试验:我们在上述代码中,把xxx替换为mp3音乐文件名,比如“spacegame.mp3”,运行后抛出如下异常:   抛异常的语句为mediaStreamer.cpp文件的Initialize函数:        ThrowIfFailed(ReadChunk(MAKEFOURCC(‘R’, ‘I’, ‘F’, ‘F’), chunkSize, chunkPos));        if (*reinterpret_cast<constDWORD *>(&dataPtr[chunkPos]) != MAKEFOURCC(‘W’, ‘A’, ‘V’, ‘E’)) ThrowIfFailed(E_FAIL);   从代码可以看出,CocosDenshion一开始就对mp3的文件进行了过滤,任何非wav的文件都会直接抛出异常。 如何解决这个问题呢?方法有二个。第一个最简单,就是修改资源本身。我们把mp3的格式转换为wav格式,网络上可以找到很多这样的工具。当然因为wav格式的文件体积比较大,所以这个方法不够完美。本文重点介绍第二个方法,也就是使用lamb库增加Windows Phone 8平台对于mp3的支持。 Lamb是目前使用最广泛的MP3编码器,大家可以访问官网获取更多信息: 链接地址: http://lame.sourceforge.net/download.php 使用Lamb所提供的解码模块,我们可以在WP8平台上实现mp3格式音乐的播放。我在这里借用一个网络上开源的代码: 链接地址: https://github.com/tianjing/lame_wp8…

3

HTML5 开发新机遇活动总结!

在12月6日早上9:30到下午4:30,微软DX部门举办了《HTML5 开发新机遇》。这个活动准们为微软的网技术做了一系列的介绍。题目包含了: 移植 Web 应用到 Universal Apps WinJS 概述 TypeScript 的优势 用 Web App Template 来一直网站到 Universal Apps Internet Explorer 最新的工具 跨平台的 Visual Studio Tools for Apache Cordova 微软的 Azure 云计算 发布应用到 Windows 商店 如果大家对这个课程有兴趣,请下载 PDF 来学习。还有教课视频在 Microsoft Virtual Academy 可以在线学习。 Apache Cordova:http://www.microsoftvirtualacademy.com/training-courses/873 HTML5 开发 Universal Apps:http://www.microsoftvirtualacademy.com/training-courses/866 HTML5 游戏迁移到 Universal Apps 和 Egret 课程:http://www.microsoftvirtualacademy.com/training-courses/869  …

1

TTF中文乱码 — Cocos2dx 游戏移植WP8之路

Cocos2dx 是目前最流行的手机游戏引擎之一,开源、轻量、多平台等的诸多特性使得它被很多国内外手游开发者所喜爱。利用Cocos2dx来开发Windows Phone 8的游戏同样也是非常的方便高效。当然任何跨平台的游戏引擎,最终解决的都只能是游戏层面的问题:包括场景的管理、图形的渲染、真实物理世界的模拟等;要想真正在一个平台上把游戏做好,不可避免会遇到很多和平台相关的问题,需要我们每个游戏程序员对于该平台的技术有个比较深入的了解。在Windows Phone 8这个平台上,我希望通过自己的努力帮助大家解决移植过程中遇到的问题。 Cocos2dx的WP8项目在中文显示这一块,一直有些问题。虽然这算不上很严重的Bug,但也足以令不少开发者费神。因为这是所有面向国内市场的游戏开发者所无法回避的问题。我总结了一下,中文显示不出主要集中在大家使用CCLabeTTF显示TrueTypeFont的中文时,会发生二个症状:一是中文显示为方块,二是中文显示乱码。如下图所示:   显示方块   显示乱码   更麻烦的是,Cocos2dx自带的TestCpp也有同样的问题(注1)。 下面给出解决方案:   中文只显示方块的问题是由于CCTableTTF所指定的TTF字体在WP8下不支持中文,比如Marker Felt 或是Arial字体。解决的办法很简单,只要替换支持中文的字体即可。这里推荐大家使用arialuni.ttf (Arial Unicode MS) 或是Cocos2dx自带的HKYuanMini.ttf(我已上传arialuni.ttf字库供大家使用)。这里提醒大家需要把新添加的字库文件放到游戏工程的Resources\fonts目录下,并确保该字库文件打入XAP包中。代码的写法类似下面所示: auto label = LabelTTF::create(“梅颖广研究Cocos2dx”,”fonts/arialuni.ttf”,36);   如果出现中文乱码的情况,那就是字符编码不对的问题,这不是简单替换字库文件所能搞定的。大家所做的第一件事情,就是确认需要输出的中文是什么编码。如果大家是直接把输出的中文写在Visual Studio里,就像上述的那条语句一样,那就去查看一下Visual Studio编码方式。方法是打开File \ Advanced Save Option…菜单,弹出如下对话框。 一般可能会是三种编码方式:Unicode(UTF-8 without signature), Unicode(UTF-8 with signature), Chinese Simplified (GB2312)。其中UTF8 的signature的意思就是BOM (Byte Order Mark) ,带不带BOM的区别可以参考如下文章: 链接地址: http://gkecenter.blog.163.com/blog/static/18138030520129292491090/   当然大家可以通过上述对话框切换编码。Cocos2dx处理的必须是UTF8编码的字符,如果不符合的话就会显示乱码。除此之外我还发现,如果编码选择不好,在代码中直接插入中文的时候,中文字符会和后面的标点产生干涉,发生奇怪的编译错误。比如下面这句,究和右分号会产生错误。 auto label =…

0

双模块的交互 — Cocos2dx 游戏移植WP8之路

Cocos2dx 是目前最流行的手机游戏引擎之一,开源、轻量、多平台等的诸多特性使得它被很多国内外手游开发者所喜爱。利用Cocos2dx来开发Windows Phone 8的游戏同样也是非常的方便高效。当然任何跨平台的游戏引擎,最终解决的都只能是游戏层面的问题:包括场景的管理、图形的渲染、真实物理世界的模拟等;要想真正在一个平台上把游戏做好,不可避免会遇到很多和平台相关的问题,需要我们每个游戏程序员对于该平台的技术有个比较深入的了解。在Windows Phone 8这个平台上,我希望通过自己的努力帮助大家解决移植过程中遇到的问题。 从程序架构角度,首先需要向大家说明的是,目前Cocos2dx 3.2以下的版本生成的Windows Phone工程,主要是针对Windows Phone SilverLight 8.0的Framework;而最新8.1系统的Windows XAML App Framework则是3.3版本之后才会完美支持。目前程序的结构本质上就是带XAML应用的Direct3D的程序模型。工程在SolutionExplore上的截图如下所示:          Cocos2dx –WP8工程 Direct3D and XAML App 工程   可以看出,二者非常类似,均由二个部分组成。第一个部分是C#编码的基于XAML的项目,比如图中的DemoGame,主要负责Windows Phone常规控件和页面逻辑;另一个部分是C++编码的基于Direct3D的Windows Phone Runtime Component,负责所有的游戏逻辑,比如图中DemoGameComponent。这两者通过DrawingSurface或DrawingSurfaceBackgroundGrid控件来渲染Direct3D图像,以非常小的性能代价获取托管代码的优秀特性。在托管的XAML中,可以发现Direct3DInterop类在XAML引擎和Direct3D之间建立起了一个通信桥梁,作为代码之间的代理。更多关于托管的XAML和Direct3D引擎的通信,请查看MSDN文档。 链接地址: http://msdn.microsoft.com/library/windows/apps/jj207012(v=vs.105).aspx 正是由于这种双模块的结构,给大家移植工作带来一些麻烦。主要表现为,大量的第三方SDK,比如腾讯的微信、OpenXLive等都是XAML层的SDK,需要大家在XAML层添加相应功能;而Cocos2dx的游戏逻辑一般放在C++的WinRT层,这样这二个模块之间的交互工作就必不可少。最简单的需求场景就是Cocos2dx发一个指令,调用XAML层的第三方SDK的某个功能。如何做到这一点呢?我给大家二个方案。   方案一:扩充Cocos2dEvent 前文提到,Direct3Dinterop类在二个模块之间扮演了交互的角色。所以,我们完全可以使用这个方法来实现自己的需求。具体做法如下: 1.  WinRT模块:在cocos2d\cocos\platform\winrt\InputEventTypes.h文件中增加新Event的定义(比如WeChat) publice num class Cocos2dEvent {    ShowKeyboard,    HideKeyboard,    TerminateApp,    WeChat//add new event };…

0

版本之惑 — Cocos2dx 游戏移植WP8之路

Cocos2dx 是目前最流行的手机游戏引擎之一,开源、轻量、多平台等的诸多特性使得它被很多国内外手游开发者所喜爱。由于其拥有众多的开发者和非常活跃的社区,Cocos2dx的版本更新一直比较快,所以一些团队和公司目前正在开发的主力产品很可能使用的是比较旧的版本。同时因为一些历史方面的原因,Cocos2dx目前处于2.x版本和3.x版本共存的局面。 Windows Phone8作为微软公司最新一代的手机操作系统正吸引越来越多的开发者包括使用Cocos2dx的游戏开发人员把作品往这个平台上迁移。那么在迁移过程中遇到的首要问题就是大家目前所使用的Cocos2dx的版本是否支持Window Phone8,能支持到什么程度? 下表是我对各个版本的Cocos2dx在Windows Phone8平台上的支持情况的简单梳理,供大家参考: 版本号 支持情况 移植建议 ≤ 2.1 不支持WP8平台 升级高版本 2.2 支持8.0SilverLight,不支持混合模式 升级高版本 2.2.1 支持8.0SilverLight 有错误,修正后使用 ≥2.2.2 支持8.0SilverLight 直接使用,尽量使用高版本 3.0 支持8.0SilverLight 编译有错,升级高版本 3.1 支持8.0SilverLight 编译有错,修正后使用 3.2 支持8.0SilverLight 直接使用 3.3 支持8.1UniversalApp 等待近期发布,最完美版本 从上表可以看出,要想用Cocos2dx引擎开发Windows Phone8的游戏,建议大家使用2.2.3和3.2之后的版本。当然只有最近马上要发布的3.3版本才是真正使用到了Windows Phone8.1的功能。 最后对于CocosStudio和Cocos2dx的版本对应情况,参考了 CocoaChina 社区的相关技术文档,这里也给大家罗列一下,谢谢! Cocos2dx CocosStudio 2.2.6 3.2 1.6.0.0 2.2.5 3.2 RC0 1.5.0.1 2.2.4   1.5.0.0 2.2.3 3.0 release,…

0

如何将 Unity3D 游戏移植到 Universal Apps

你是不是用 Unity 引擎来开发 iOS 或者 Android 的游戏? 如果你不知道,Unity 都可以开发 Windows Phone 8.0 / 8.1, Windows Store Apps 8.0 / 8.1, 和 Universal Apps。 移植你的游戏到微软开发平台是免费支持,不需要买 Unity Pro licenses 。以下的链接可以让开发者多了解移植过程。我会从 Unity 的 Build Settings 构建一个Windows, Windows Phone, 或 Universal Apps 的版本。我会带着大家来更改硬件的问题,例如:分辨率,内存,纹理,键盘,等等。我会让大家了解 .NET API 的差别在哪里,然后介绍几个方案来解决问题: 方案: Unity插件, 例子:Github Unity Porting Lab Plugins Action (void delegate), 例子: WindowsGateway.cs Global instances,…

0