拦截网站做跳转,卓讯企业名录搜索软件,网站的建设 想法,门户网站是网络表达吗转自#xff1a;http://www.jiandaima.com/blog/archives/945.html 是如何输出到多平台的#xff1f; 我的第一篇文章#xff0c;选择了一个不那么简单的主题#xff0c;但是是我近期比较感兴趣的。这周#xff0c;我和一个朋友#xff0c;谈到了游戏开发和Unity3D#… 转自http://www.jiandaima.com/blog/archives/945.html 是如何输出到多平台的 我的第一篇文章选择了一个不那么简单的主题但是是我近期比较感兴趣的。这周我和一个朋友谈到了游戏开发和Unity3D他问我“为什么Unity可以输出到那么多的平台上”我想了一下试图组织语言但是我尽然不能回答这个问题。我从来没有认真想过这个问题所以我开始做一些研究。 哪些人适合看这篇文章如果你是一个开发者对于 托管、本地代码执行环境和不同平台这些概念有一定的了解这篇文章是为你准备的。如果你是3D、2D美术或者对于这类工作比较好奇的人我非常抱歉你可以停下来了并接受一个可怕的答案它就是这样神奇。你可以跳到本文的最后两段结论在那里。如果你还是很好奇你可以试一试继续读下去。 我们开始讨论这篇文章的话题Unity3D可以说是市面上最流行的游戏开发引擎了。它非常友好相信我学习一些教程之后15岁的孩子也能使用它。它现在有Window和MacOs X版Linux现在还在实验阶段本文最重要的一点它可以输出在几乎所有的设备上。我不是在开玩笑看一下官网上的列表 iOS Windows Phone BlackBerry Windows Windows Store Apps Mac OS X Linux Their native Web Player PS 3 Xbox 360 Wii U PS 4 Xbox One Tizen SamsungTV PS Vita Gear VR Oculus Rift 它适合无数的设备和环境。如果你还不知道Unity3D可以试一下。免费的版本可输出Mac OX, Linux, Window, iOS, Android, BlackBerry, Web Player,SamsungTV, WebGL, TizenWindowPhone。相当不错试一下。遗憾我并没有收收到Unity官方的广告费仅仅只是我觉得它真是太赞了。 更新Jashan在评论里指出这篇文章我只把重点放在了脚本上所以我决定多写一点关于Unity3D如何输出其他特性到如此多的平台上。阅读下面一段你会注意到尽管使用Unity技术是一个伟大的工作它依然依赖于许多公司帮助它将一些特性引入Unity。在新平台中发布时Unity的开发人员会一个一个地检查量否支持每个特性如果是的话完成这些特性的时间会大幅度降低。现在让我们看一下这些主要要特性。 图形 我们从图形开始。Unity提供大量的图形APIOPenGL OpenGL ESWebGLMetal和DirectX每一套API都有一个目标平台。OpenGl用得最广它可以运行在MacOS XiOSLinux还有Windows上。OpenGL ES适合一些移动设备Andriod和iOS最为常见。WebGL是基于浏览器的图形应用和游戏的希望它可以淘汰掉Flash插件和Unity的Web Player。Metal是苹果上新的图形API它可以兼容最近的iOS设备和一些Californian公司的电脑。最后DirectX是微软自己的的图形API兼容Windows Windows Phone、XBOX。所以UT的开发者花了大量的时间在图形上但大部是用于将这些工具整合进引擎中而不是从头开始写自己的API。 物理引擎 轮到物理引擎了Unity信赖一个工具Nvidia的PhysXUnity发布的每一个平台它都可以支持。毫无疑问它是市面上最好的物理引擎从每一版的游戏引擎开始它就是值得信任和高效的那时PhysX还被叫做Novodex也没有被Nvidia收购。不同平台使用同一物理解决方案的主要原因是它的一致性在不同的设备上所有的碰撞、运行都必须有相同的行为否则某些平台就会更受欢迎。 灯光 更说一次Unity依赖于终端工具实现灯光不论是烘焙出来的灯光还是实时灯光。在以前进行烘焙灯光用Autodesk的Beast现在它被 Enlighten取代。在新的5.X版本中它可以同时实现时实全局光照和烘焙灯光。 网络层 2014年Unity内部发布了UNETUnity的网络层是Unity自主研发的多玩家的网络方案。过去一些网络解决方案开始普及最有名的就是Photon。新的工具包括两个方面网络层的API有API高低级别和有偿的多人服务不同于上面描述的图形、物理引擎和灯光由于这是一个内部项目UT必须移值代码到所有支持的平台上去。 最后脚本 给那些还不了解Unity的人Unity让我们使用C#和UnityScript脚本EWW不需要任何转换或是专门的工具将我们的游戏输出到前面列出的平台上。好像很简单。引出了一个问题如何做到的我以为只要我停下来想一想就可以得到答案但即使我有一些Unity工作原理的认识破我也不能回答为什么。所以我问了这些年我最好的朋友google如本文标题的这个问题。这样说吧我没有得到最好的反馈后来我找到了原因我问了错误的问题。 本文中真实的明星是Mono。我知道Mono对于Unity是很重要但它远远超过了我所想。让我们从这里开始Mono究竟是什么根据官网Mono是跨平台开源的.net开发框架。还是有一些疑惑让我们深入Mono的历史。 2000年微软发布了“基于inernet标准的新的平台”.Net的框架Xamarin公司有一个叫Miguel de Icaza的人非常喜欢.NET想开发Linux的版本微软的.net不支持Linux到现在还是不支持和一些其他的非窗口平台。他干脆决定创建他自己的环境Mono工程在2001开源。Mono由一个开源项目把net框架被带入了其他平台包括C#编译器和CLR公同语言运行库。从历史来看Mono一开始就被放在了.net之后。今天它不仅实在了.net的功能还有一些外的功能。总结一下Mono是一个开源项目用C/C实现了.Net的开发框架今天可以运行在一大堆平台上。 现在我们停止讨论Mono转到Unity上来。在Unity中我们是如何用脚本编程用C#或是UnityScript这里又引出一个问题如果我们用C#编程为什么Unity游戏可以运行在如此多的平台上难道在上不需要JAVA在iOs上不需要用Object-C来代替C#难道Unity编不同平台的游戏时不需要平台本地代码如此多的问题。 我们从最后一个问题开始。不需要Unity编不同平台的游戏不需要本地代码。听上去太疯狂了。Android不用JAVA不用。你也可以用本地代码开发用C/C)但是没有人想那样做对吗那就是Mono做的事情。 现在我们说一说最重要的问题没有C#的运行环境为什么我的Android设备可以运行一个C#写的游戏Mono运行了它。但是我并没有在我的设备上安装Mono呢所以基本问题是Mono是如何进入我的设备的Unity编译的游戏和用Mono开发的应用运行了一个Mono环境。你疯了没有我现在不能证明它但是Xamarin在这里“How it works”声明过非常有道理 使用C#写你的APP从C#中直接调用平台的API。Xamarin编辑器捆绑了.NET运行库输出成一个ARM可执行文件再打包进iOS和应用中。 这又产生了另一个问题一个MONO发开APP附带了整个框架答案可以在同一网页中找到编辑Link的时候在框架中没有使用的类会被剥离出来。所以只是部分框架被绑定在你的APP中如果你想了解更多的它是如何工作访问网页 Developer Center。 所以Mono是这里的上帝它为Unity游戏提供了.Net框架。这是为什么你使用C#编出来的游戏能在如此多的平台上运行的原因。这是我的第一贴我希望我能有更多的想法来更新博客。不论你喜欢或者不喜欢或者某个地方有错甚至你觉得这篇文章完全是胡扯都可以请留言。 重要更新2015年9月IL2CPP技术改变了脚本后台工作的方式淘汰了Mono的VM和AOT编辑器。 下面读什么我写了一个新贴子关于Unity3D在引擎之下是如何工作的我们的代码是如何与引擎代码相交互的。