2011-08-05 27 views
5

我對使用Unity3d開發應用程序非常感興趣。 我喜歡這樣一個事實,即我可以開發一次並將應用程序移植到多個平臺(Mac/Windows/iPhone/Android),並且我的Mac上的性能似乎相當不錯。iPhone上的Unity3d性能

這將是我第一次爲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要容易得多。」

回答

9

有在統一的特定資源,將與手機開發,包括資源,着色器等是專門在考慮移動設計提供幫助。

您肯定不會希望將未優化的PC質量資產放入Unity項目中,並將其導出到iOS平臺,因爲您將確保較差/不可靠的性能。你想要做的就是開始構建一個場景,使用與你想要的遊戲相似的資源,然後看看真實設備上的性能。這會讓你感覺到遊戲在生產中的性能水平。

請記住,iPhone,iPad,iPad2等的性能會因爲您正在做什麼以及您正在接觸哪些功能而大不相同。雖然Unity3D經過了大量優化以處理各種場景,但您當然可以做一些事情,例如霧化,這會推高填充率(平臺的已知限制)並最終導致可怕的性能。

您是否可以在純粹在Objective-C中構建應用程序時獲得更多性能?如果你在引擎開發方面擁有合適的技能,可以爲你的特定需求設計一個特定的技術實現 - 當然。

你只需要決定是否要花時間寫技術或建築產品。選擇Unity的大多數人都這樣做,因爲你獲得了一個非常好的引擎,大多數人都無法擊敗它的性能(嘗試構建自己的景觀引擎),同時獲得特殊的上市時間......並且真正實現了上市時間這在大多數情況下非常重要。

+0

出色答卷。 –

1

另外請記住,如果您針對所有iOS設備,重GPU圖形的區別意味着iPhone 3GS到4之間,然後從4,4S到iPad2,& 3之間的巨大性能差異即使是新iPhone5或iPad4上的某些遊戲可以以比前輩更高的FPS運行。請記住保持poly的值低,當然在你的地形上保持低分辨率,甚至像像素誤差那樣微妙的東西可能會大大影響。霧總會產生應變。紋理> 512x512可能會導致問題,與多個光源相同。沒有光線渲染的速度會更快,並烘烤陰影和高光。我還發現,運行在Native Resolution而不是最佳性能可能會影響性能(Unity 4)。廣告牌,封鎖剔除也是您想要查找的主題。看起來不錯,跑得很慢。

如果性能對您而言是個問題,您可能需要一個完全不同的引擎。像虛幻引擎3這樣的更直接的「本地」引擎,其功能令人驚歎。它可以做到這一點,沒有太多的開銷。案例和觀點,Epic Citadel演示應用程序運行在iPhone 4或3GS上。在Unity中可比較的東西會很慢,並且看起來不像性感。

3

這是一箇舊帖子,但我想我會回答這個問題,因爲這裏沒有人真的說得很對。

請務必記住,Unity的內部核心工作原理完全是本地的。物理引擎和所有涉及碰撞的事物。遮擋系統(umbra)。整個渲染引擎核心。所有這些都是用C/C++編寫的,並且可以在任何平臺上以完全原生速度運行。 AmitApollo說的是不正確的,與統一相比,虛幻引擎3不是更直接的「本地」。 Unity和Unreal引擎3以及任何其他3D引擎(如Ogre或cocos3d),其核心渲染系統都是用c/C++編寫的。其中一些引擎可能具有某些內部渲染算法比其他渲染算法更好地實現,因此可能會產生更好的性能,但這與它們是否是「原生」無關,因爲內部核心渲染系統對於所有渲染系統都是原生的。

物理引擎的內部工作原理也是用c/C++編寫的,因此UE3和Unity中的物理引擎都以「全速原理」運行。

在iOS上,epicCitadel演示還沒有顯示出比Unity更高的技術實力或性能。堡壘演示的'視覺影響'很大程度上取決於它是非常好的藝術作品。堡壘演示不會比Unity在iOS上能夠處理的任何更高的頂點數量,堡壘演示沒有演示比Unity在iOS上能夠做到的任何更高級的着色器或照明技術。實際上,Unity的更多示例展示了比虛幻引擎3所展示的更先進的移動渲染技術。查看Unity製作的Shadowgun或BladeSlinger遊戲,這兩款遊戲均展示了比虛幻引擎3所展示的更先進的移動渲染技術。 Light Probes,具有半透明和法線貼圖的移動BRDF着色器,以及良好實施的動態移動陰影等等。應用商店中絕大多數成功的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降至60 fps以下真的非常困難。我從來沒有受到過這個阻礙。

如果我們要與虛幻引擎3進行比較,請記住,UE3還設置爲使用非本地語言UnrealScript編寫遊戲邏輯。 Unrealscript是一種非常類似於Mono C#或Java的語言,其中UnrealScript被編譯爲字節碼,然後在運行時解釋。意思就像Unity一樣,遊戲邏輯在UE3中不是「本地」的。

現在,如果你看這裏: http://lua-users.org/wiki/LuaVersusUnrealScript 也就是說在使用int一個簡單的算術運算比較虛幻到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實際上是能夠爲遊戲邏輯代碼提供更好性能的引擎。

與iOS上的Unity相比,UE3更先進,或提供更多性能或更高圖形功能的概念並不真實。恰恰相反是真的。

現在確實如果你使用了類似cocos3d的東西,你可能會獲得更好的性能,因爲你的遊戲邏輯也可以用C++本地編寫。但使用像c#這樣的腳本語言來處理遊戲邏輯的好處我認爲遠遠大於性能損失,而這通常不會成爲問題。也就是說,使用腳本語言進行遊戲邏輯的好處在於,它爲您提供了更快的設計迭代,在進行遊戲時,由於事物的離奇程度以及重新編譯和測試代碼的頻率很高,因此非常重要。

但是,在Unity中,使用Pro版本編寫本地代碼插件非常簡單。所以如果你有一段需要以本機速度運行的性能關鍵代碼,你可以用C++編寫它,編譯成本地庫,然後從Mono C#調用它。

0

有助於提高IOS性能的一項資產是KGFSkyBox。

我們發現,unity3d天空盒正在使用多達6次drawcalls!這對於具有最大30DC的限制的設備來說是個問題!

我們通過實施KGFSkyBox解決了這個問題,如果你有地形(隱藏底部半球),它可以將drawcalls減少到1。如果你不使用地形KGFSkyBox將使用2個drawcalls來渲染,它仍然比6好!

看看這裏: http://u3d.as/4Wg

如果您有任何問題或建議,只是我們這裏聯繫:[email protected]