这是一篇旧帖子,但我想我会回答它,因为这里没有人真的完全正确。
重要的是要记住,Unity 的内部核心工作完全是原生的。物理引擎以及因此处理碰撞的所有内容。遮挡系统(本影)。整个渲染引擎核心。所有这些都是用 C/C++ 编写的,并且可以在任何平台上以全本机速度运行。AmitApollo 所说的根本不正确,与统一相比,虚幻引擎 3 根本不是更直接的“原生”。无论是 Unity 和 Unreal 引擎 3,还是任何其他 3D 引擎,如 Ogre 或 cocos3d,它们的核心渲染系统都是用 c/c++ 编写的。其中一些引擎可能具有比其他引擎更好地实现的某些内部渲染算法,因此可能会产生更好的性能,但这与它们是否“原生”无关,
物理引擎的内部工作也是用 c/c++ 编写的,因此 UE3 和 Unity 中的物理引擎都以“全原生速度”运行。
epicCitadel 演示也没有显示出比 iOS 上的 Unity 更高的技术实力或性能。Citadel 演示的大部分“视觉冲击”仅仅来自于它是非常好的艺术品这一事实。Citadel 演示没有推动任何比 Unity 在 iOS 上可以处理的更高的顶点数,Citadel 演示没有展示任何比 Unity 在 iOS 上可以执行的更高级的着色器或照明技术。事实上,Unity 展示的移动渲染技术比虚幻引擎 3 展示的更多。看看 Unity 制作的 Shadowgun 或 BladeSlinger 等游戏,这两款游戏都展示了比虚幻引擎 3 展示的更先进的移动渲染技术。光探头,具有半透明和法线贴图的移动 BRDF 着色器以及良好实现的动态移动阴影等等。应用商店中绝大多数最成功的 3D 游戏都是 Unity 游戏,因此 Unity 对 Unity 的移动渲染性能和能力进行了大量研发。
现在 Unity 使用 C# 和 Mono 编写脚本。它的运行速度确实比本机代码慢,大多数估计在 iOS 上慢了 50%。但是你必须记住,你只是在这段代码中做游戏逻辑。您没有在 Unity 中使用 C# 和 Mono 编写任何代码来处理其内部渲染系统的工作,也不是物理系统的内部工作。您只需用 C# 编写游戏逻辑,然后与渲染和物理核心交互,然后以全本机速度执行。Mono C# 的执行速度确实比原生 C++ 慢,但如果你聪明地编程,我想你会发现这根本不是一个障碍,因为你只在 Mono C# 中做游戏逻辑,而游戏逻辑不一定是 CPU 密集型的。以我的经验,在纯用 Mono C# 编写的游戏逻辑上让 iPad 2 降至 60 fps 以下确实非常困难。
如果我们要与虚幻引擎 3 进行比较,请记住 UE3 也被设置为使用非本地语言 UnrealScript 对其游戏逻辑进行编程。Unrealscript 是一种类似于 Mono C# 或 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# vs C++ 简单算术基准。它显示 Mono C# 是 C++ 执行简单 int 算术的 3/4 速度。使用浮点数进行简单算术运算时,Mono C# 的速度大约是 1/2。int64 和 double 基准对我们来说意义不大,因为通常您永远不会在 iOS 游戏逻辑的性能关键代码中使用它们。
现在那里的其他基准测试确实显示 Mono C# 有时的性能只有 C++ 的 1/20。但这些都是通过非常具体的测试,我能找到的最好的苹果对苹果基准测试是那些简单的算术测试。
确实如此,因为 Unity 的脚本运行在 Mono C# 上,而 UE3 运行在 UnrealScript 上。Unity 实际上是可以在游戏逻辑代码中为您提供更好性能的引擎。
UE3 比 iOS 上的 Unity 更先进、性能更高或图形功能更强大的想法是不正确的。事实恰恰相反。
Now it is true that if you used something like cocos3d you could potentially get better performance because your game logic could be written natively in C++ as well. But the benefits of working with a scripting language like c# to do game logic I think far outweighs the performance loss that is generally never an issue. Namely the benefits of using a scripting language for game logic is that it offers you faster iterations of design, which when doing games is really critical due to how quirky things can be and how frequently you have to recompile and test code.
However, in Unity, it is really easy to write native code plugins with the Pro version. So if you ever do have a piece of performance critical code that needs to run at native speed, you can write it in C++, compile it to a native library, then call that from Mono C#.