这是一篇旧的帖子,但我觉得我应该回答一下,因为没有人真正理解它。
需要记住的是,Unity的内部核心工作完全是本机的。物理引擎以及与碰撞有关的所有内容。遮挡系统(阴影)。整个渲染引擎核心。所有这些都是用C/C++编写的,并且在任何平台上都以完全本机速度运行。AmitApollo说的不正确,虚幻引擎3与Unity相比并不更直接“本机”。无论是Unity、虚幻引擎3还是任何其他3D引擎(如Ogre或cocos3d),它们的核心渲染系统都是用C/C++编写的。其中一些引擎可能比其他引擎实现了某些内部渲染算法,并因此产生了更好的性能,但这与它们是否“本机”无关,因为它们的内部核心渲染系统对于所有这些引擎都是本机的。
物理引擎的内部工作也是用C/C++编写的,因此UE3和Unity中的物理引擎都以“完全本机速度”运行。
epicCitadel演示也不显示比iOS上的Unity更大的技术水平或性能。 Citadel演示的许多“视觉影响”仅仅来自于它是非常好的艺术品。 Citadel演示并没有推动任何比Unity在iOS上处理的更高顶点数更先进的着色器或照明技术。实际上,有更多的例子显示了Unity展示了比虚幻引擎3所展示的更先进的移动渲染技术。例如Shadowgun或BladeSlinger这样的游戏,都展示了比Unreal Engine 3展示的更先进的移动渲染技术。其中一些包括光探针、移动BRDF着色器、透明度和法线贴图以及良好实现的动态移动阴影等。在App Store中最成功的3D游戏大部分都是Unity游戏,因此Unity已经投入了大量的R&D(研究与开发)到Unity的移动渲染性能和功能中。
现在,Unity使用C#和Mono进行脚本编写。根据大多数估计,在iOS上运行速度比本机代码慢大约50%。但是您必须记住,您只在此代码中执行游戏逻辑。您不会在Unity中使用C#和Mono编写任何处理其内部渲染系统或物理系统工作的代码。您只在C#中编写游戏逻辑,然后与渲染和物理核心进行交互,然后以完全本机速度执行。Mono C#的执行速度比本机C++慢,但是如果您编写智能程序,我认为您会发现这根本不是问题,因为您只在Mono C#中执行游戏逻辑,而游戏逻辑并不一定需要占用CPU。据我的经验,纯粹使用Mono C#编写的游戏逻辑很难使iPad 2降至60fps以下。我从来没有受到过这样的限制。
如果我们要将其与虚幻引擎3进行比较,请记住,UE3也是为非本地语言编写游戏逻辑的,即UnrealScript。 UnrealScript是一种类似于Mono C#或Java的语言,其中UnrealScript被编译为字节码,然后在运行时进行解释。这意味着,就像Unity一样,游戏逻辑在UE3中也不是“本地”的。
现在,如果您在这里看看:
http://lua-users.org/wiki/LuaVersusUnrealScript
这是一个比较UnrealScript和C ++在使用int进行简单算术运算时的基准测试。它显示unreal script的速度是C ++的1/4到1 / 20th。
然后再看看这里:
http://www.codeproject.com/Articles/212856/Head-to-head-benchmark-Csharp-vs-NET
如果您向下滚动到C#与C ++简单算术基准测试。它显示Mono C#在执行简单的int算术运算时是C ++的3/4。在执行浮点数简单算术时,Mono C#的速度约为1/2。 int64和double基准测试对我们来说并不重要,因为通常您不会在iOS游戏逻辑的性能关键代码中使用它们。
现在,其他基准测试表明Mono C#有时具有与C ++相差1/20的性能。但这些是通过非常特定的测试进行的,实际上我能找到的最好的苹果与苹果基准测试是那些简单算术测试。
因此,实际上,由于Unity的脚本运行在Mono C#上,而UE3运行在UnrealScript上。 Unity实际上是可以为您提供在游戏逻辑代码中更好的性能的引擎。
虚幻引擎3比Unity更先进,或者在iOS上提供更好的性能或任何更大的图形能力的观念根本不是真实的。恰恰相反。
现在,如果您使用类似cocos3d之类的东西,您可能会获得更好的性能,因为您的游戏逻辑也可以用C ++编写原生代码。但是,使用像c#这样的脚本语言来执行游戏逻辑的好处远远超过了通常不是问题的性能损失。即使用脚本语言进行游戏逻辑的好处是它为您提供更快的设计迭代,这在做游戏时非常关键,因为事情可能很古怪,并且您经常必须重新编译和测试代码。
但是,在Unity中,使用专业版很容易编写本地代码插件。因此,如果您有需要以本地速度运行的性能关键代码片段,可以将其编写为C ++,将其编译为本地库,然后从Mono C#调用该库。