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

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

Windows10 是微软公司最新一代的跨平台及设备应用的操作系统。它统一了包括个人电脑、平板电脑、智慧型手机、嵌入式系统、Xbox One以及新产品Surface Hub和HoloLens等等的整个Windows产品系列的作业系统,共享一个通用的应用程式架构(UWP)和Windows Store的生态系统。随着今年的7-29 号Windows10发布大会的召开,目前微软已经开始向全球用户推送Windows10 系统,在未来的一年内所有用户都将能免费升级。 Cocos引擎也在第一时间对于Windows10 平台提供了强有力的支持。目前使用官网最新的Cocos2dx 3.7版本已经能开发基于Windows10平台的通用应用架构的游戏。这里笔者根据自己的经验给大家简单介绍一下如何搭建开发Windows10 的Cocos游戏的环境。   一、开发环境 ● 首先开发者必须把系统升级到Windows10 RTM版本(废话)。 ● 然后当然是安装Visual Studio 2015,目前官方提供免费的community版本:        https://www.visualstudio.com/downloads/download-visual-studio-vs ● 需要注意的是一定要安装Windows10 的SDK,即勾选下方黄框的选项。     二、HelloWorld工程 1.  从官网下载最新的Cocos2dx代码(3.7.1) 2.  解压后,使用Cocos new命令创建新工程。从工程的目录中可以发现proj.win10的目录,证明Cocos引擎已经支持Windows10平台了。   3.  打开Win10的工程,可惜这个新工程是编译不过的。错误信息如下: 1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Application Type\Windows Store\10.0\Platforms\x64\PlatformToolsets\v140\Toolset.targets(41,5): error : The Windows SDK version (10.0.0.0) was not found. Install the required version of Windows SDK…

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

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