我对使用Unity3d开发应用程序非常感兴趣。我喜欢的事实是,我可以开发一次,并将应用程序移植到多个平台( Mac /Windows/iPhone/Android),并且在我的Mac上的性能似乎相当好。
这将是我第一次为iPhone编写应用程序,我对未来的性能问题很好奇。我想我肯定会在iPhone上使用Unity3d作为原型,但我想知道构建一个iPhone Unity3d应用程序是否会像使用Objective-C编写的本机应用程序一样高效地使用iPhone资源。
Unity3d站点似乎暗示Unity3d算法是经过优化的,我想如果我在Unity3d论坛上问这个问题,我会得到这样的回答。理想情况下,如果有人用Unity3d和Objective-C构建了一个应用程序,并且可以对两者进行比较,我会感兴趣的。
让我思考这个问题的是Andrew and Peter Mortensen's response to a question about iOS development cost,它的开头是“开发iPhone应用程序比学习Cocoa容易得多”。
发布于 2011-08-12 03:05:10
Unity中有一些特定的资源将有助于移动开发,包括资源、着色器等,这些资源都是专门为移动而设计的。
你当然不会想把“未经优化”的PC质量的资产放到Unity项目中,然后将其导出到iOS平台上,因为这样会确保糟糕/不可靠的性能。你想要做的是开始使用与你想要的游戏质量相似的资源来构建一个场景,然后看看在真实设备上的性能是什么。这将让你感觉到你的游戏在生产中能达到什么样的性能水平。
请记住,iPhone、iPad、iPad2等的性能将根据您正在执行的操作和您正在触摸的功能而变化很大。虽然Unity3D已经针对各种情况进行了大量优化,但你当然可以做一些像雾化这样的事情,这会推动填充率(该平台的一个已知限制),并最终导致可怕的性能。
您是否有可能从纯粹使用Objective-C构建应用程序中获得更高的性能?如果你在引擎开发方面有适当的技能,可以为你的特定需求设计特定的技术实现-当然。
你只需要决定你是想把时间花在写技术上还是开发产品上。大多数选择Unity的人之所以选择Unity,是因为你有一个非常好的引擎,大多数人都无法超越它的性能(试着构建你自己的景观引擎),同时又能获得非凡的上市时间……在大多数情况下,现在是真正重要的上市时间了。
发布于 2013-06-11 08:35:01
这是一个古老的帖子,但我想我会回答它,因为这里没有人真正正确地理解它。
重要的是要记住,Unity的内部核心工作方式完全是原生的。物理引擎,以及所有处理碰撞的东西。遮挡系统(本影)。整个渲染引擎核心。所有这些都是用C/C++编写的,在任何平台上都能以最快的速度运行。AmitApollo所说的根本不正确,与unity相比,虚幻引擎3根本不是更直接的“原生”。Unity和虚幻引擎3,以及任何其他3D引擎,如Ogre或cocos3d,他们的核心渲染系统都是用c/c++编写的。这些引擎中的一些引擎可能比其他引擎更好地实现了某些内部渲染算法,因此可能会产生更好的性能,但这与它们是否为“本机”无关,因为内部核心渲染系统对所有引擎都是本机的。
物理引擎的内部工作也是用c/c++编写的,因此UE3和Unity中的物理引擎都是以“全速”运行的。
epicCitadel演示也没有显示出比iOS上的Unity更强大的技术能力或性能。城堡演示的“视觉冲击”很大程度上来自于它确实是很好的艺术作品。城堡演示没有推动任何比Unity在iOS上可以处理的顶点数更高的顶点计数,城堡演示没有展示任何比Unity在iOS上所做的更高级的着色器或照明技术。事实上,Unity展示了比虚幻引擎3更先进的移动渲染技术的例子更多。看看像暗影枪或联合制造的BladeSlinger这样的游戏,这两款游戏都展示了比虚幻引擎3更高级的移动渲染技术。光探测器,具有半透明和法线贴图的移动BRDF着色器,以及良好实现的动态移动阴影等等。App store中最成功的3D游戏绝大多数都是Unity游戏,Unity因此在Unity的移动渲染性能和功能上投入了大量的研发。
现在Unity是用C#和Mono编写的脚本。它的运行速度确实比本机代码慢,据大多数估计,在iOS上大约慢50%。但是你必须记住,在这段代码中你只是在做游戏逻辑。你不是在用C#和Mono写任何代码来处理它的内部渲染系统的工作,也不是物理系统的内部工作。您只需在C#中编写游戏逻辑,然后与渲染和物理核心接口,然后以全速执行。Mono C#的执行速度确实比原生C++慢,但如果你聪明地编程,我想你会发现这几乎不是一个障碍,因为你只在Mono C#中做游戏逻辑,并且游戏逻辑不一定会占用大量的CPU。根据我的经验,用Mono C#编写的纯游戏逻辑很难让iPad 2降到60帧/秒以下。实际上,我从来没有被这个问题阻碍过。
如果我们要将其与虚幻引擎3进行比较,请记住,UE3的游戏逻辑也是用非本机语言UnrealScript编写的。Unrealscript是一种很像Mono或Java的语言,UnrealScript被编译成字节码,然后在运行时进行解释。这意味着,就像Unity一样,游戏逻辑在UE3中不是“原生的”。
现在看看这里:http://lua-users.org/wiki/LuaVersusUnrealScript,这是一个基准测试,使用整数对UnrealScript和C++进行简单的算术运算比较。结果表明,虚幻脚本的速度是C++的1/4到1/20。
然后看看这里:http://www.codeproject.com/Articles/212856/Head-to-head-benchmark-Csharp-vs-NET如果你向下滚动到C#与C++的简单算术基准测试。它表明,单声道C#的速度是C++进行简单整数运算的3/4。单声道C#的速度大约是使用浮点数进行简单算术时的1/2。int64和double基准测试对我们并没有多大意义,因为通常您永远不会在iOS游戏逻辑的性能关键代码中使用它们。
现在,其他基准测试显示,Mono C#的性能有时只有C++的1/20。但这些都是通过非常具体的测试,我能找到的最好的苹果对苹果基准测试是那些简单的算术测试。
所以说真的,因为Unity的脚本运行在Mono C#上,而UE3运行在UnrealScript上。Unity实际上是一个引擎,它将在游戏逻辑代码中为您提供更好的性能。
认为UE3比iOS上的Unity更先进,或者提供更多的性能,或者更强大的图形功能的想法是不正确的。事实恰恰相反。
现在确实,如果你使用像cocos3d这样的东西,你可能会获得更好的性能,因为你的游戏逻辑也可以用C++原生编写。但是,我认为使用像c#这样的脚本语言来做游戏逻辑的好处远远超过了性能上的损失,这通常不是一个问题。也就是说,为游戏逻辑使用脚本语言的好处是,它为您提供了更快的设计迭代,这在做游戏时非常关键,因为事情可能是多么离奇,以及您必须重新编译和测试代码的频率。
然而,在Unity中,用Pro版本编写本地代码插件真的很容易。因此,如果你有一段性能关键的代码需要以原生速度运行,你可以用C++编写它,将它编译成一个本地库,然后从Mono C#调用它。
发布于 2013-01-03 06:19:38
另外,请记住,如果你的目标是所有的iOS设备,高图形处理器显卡的差异意味着在iPhone 3GS到4,然后从4,4S到iPad2之间存在巨大的性能差异&3甚至在新的iPhone5或iPad4上的某些游戏可能会以比它的前身更高的FPS运行。记住要保持较低的多边形,当然在你的地形中保持较低的分辨率,甚至像像素误差这样微妙的东西也可能产生巨大的影响。雾总是会产生拉伤。纹理> 512x512可能会导致问题,多个光源也是如此。没有灯光渲染,烘焙阴影和高光要快得多。我还发现,在Native Resolution下运行,而不是在最佳性能下运行,可能会阻碍性能(Unity 4)。广告牌,遮挡剔除也是你想要查找的主题。在看起来不错和跑得慢之间有一条细微的界限。
如果性能对你来说是个问题,你可能想要一个完全不同的引擎。一个更直接的“原生”引擎,如虚幻引擎3,其功能令人惊叹。而且它可以在没有太多开销的情况下做到这一点。案例和要点,史诗城堡演示应用程序在iPhone 4或3GS上运行。在Unity中类似的东西会很慢,而且看起来不是很性感。
https://stackoverflow.com/questions/6961474
复制相似问题