11

我对使用 Unity3d 开发应用程序非常感兴趣。我喜欢我可以开发一次并将应用程序移植到多个平台(Mac/Windows/iPhone/Android)的事实,而且我的 Mac 上的性能似乎相当不错。

这将是我第一次为 iPhone 编写应用程序,我对未来的性能问题感到好奇。我想我肯定会在 iPhone 上使用 Unity3d 作为原型,但我想知道构建 iPhone Unity3d 应用程序是否会像使用 Objective-C 编写的本机应用程序一样有效地使用 iPhone 资源。

Unity3d 网站似乎暗示 Unity3d 算法已经过优化,我想如果我在 Unity3d 论坛上问这个问题,我会得到这样的回应。理想情况下,我有兴趣听取在 Unity3d 和 Objective-C 中构建应用程序并可以比较两者的人的意见。

让我思考这个问题的讨论是Andrew 和 Peter Mortensen 对一个关于 iOS 开发成本的问题的回答,该问题的开头是“开发 iPhone 应用程序有一种比学习 Cocoa 更简单的方法”。

4

5 回答 5

12

Unity 中有一些特定的资源将有助于移动开发,包括专为移动设计而设计的资源、着色器等。

您当然不希望将“未优化”的 PC 质量资产放入 Unity 项目并将其导出到 iOS 平台,因为这样会确保性能不佳/不可靠。您要做的是开始使用与您的游戏所需的质量相似的资产构建场景,然后查看真实设备上的性能。这将使您了解您可以从生产中的游戏中获得什么样的性能水平。

请记住,iPhone、iPad、iPad2 等设备的性能会因您正在执行的操作以及您接触的功能而有很大差异。虽然 Unity3D 已经过大量优化以处理各种场景,但您当然可以执行诸如雾化之类的事情,这会提高填充率(平台的一个已知限制)并最终获得可怕的性能。

您能否通过纯粹在 Objective-C 中构建应用程序获得更多性能?如果您在发动机开发方面拥有合适的技能,可以根据您的特定要求设计特定的技术实施 - 当然可以。

您只需要决定是否要花时间编写技术或构建产品。大多数选择 Unity 的人这样做是因为您获得了一个大多数人无法超越的出色引擎(尝试构建您自己的景观引擎),同时获得了极好的上市时间……而且是真正的上市时间在大多数情况下,这真的很重要。

于 2011-08-11T19:05:10.323 回答
4

这是一篇旧帖子,但我想我会回答它,因为这里没有人真的完全正确。

重要的是要记住,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#.

于 2013-06-11T00:35:01.203 回答
1

还请记住,如果您针对所有 iOS 设备,重型 GPU 图形的差异意味着 iPhone 3GS 到 4,然后从 4,4S 到 iPad2 和 3 之间的巨大性能差异,甚至新 iPhone5 或 iPad4 上的某些游戏也可以在FPS比它的前辈更高。请记住保持多边形的低,当然在你的地形中保持低分辨率,甚至像像素错误这样微妙的东西也会产生巨大的影响。雾总是会产生压力。纹理 > 512x512 可能会导致问题,与多个光源相同。没有灯光渲染,烘焙阴影和高光要快得多。我还发现以原生分辨率运行而不是最佳性能可能会影响性能(Unity 4)。广告牌、遮挡剔除也是您要查找的主题。

如果性能对您来说是个问题,您可能需要完全不同的引擎。像 Unreal Engine 3 这样更直接的“原生”引擎的功能令人惊叹。它可以在没有太多开销的情况下做到这一点。案例和要点,在 iPhone 4 或 3GS 上运行的 Epic Citadel 演示应用程序。在 Unity 中类似的东西会很慢,而且看起来也不那么性感。

于 2013-01-02T22:19:38.300 回答
0

看看使用 Unity 制作的其他游戏,看看你的游戏适合什么地方,以及你可以期待什么样的性能,也许是个好主意。

http://www.youtube.com/watch?v=7aVttB25oPo

http://unity3d.com/gallery/game-list/

于 2011-08-05T19:25:55.330 回答
0

One asset that is helpful to increase performance on IOS is KGFSkyBox.

We found out, that unity3d skyboxes are using up to 6 drawcalls! This is guite a problem on devices having limits of max 30DCs!

We solved this by implementing KGFSkyBox which reduces the drawcalls to 1 if you have terrain (Hides bottom sky hemisphere). If you do not use terrain KGFSkyBox will render using 2 drawcalls which is still better than 6!

Check it out here: http://u3d.as/4Wg

If you have any questions or suggestions just contact us here: support@kolmich.at

于 2013-06-29T07:08:05.707 回答