看板 GameDesign 關於我們 聯絡資訊
圖文版:http://goo.gl/dyQNt Unity 是最近相當受歡迎的遊戲引擎,具備了易於非技術人員使用的編輯器、 以及完整的跨平台支援。Corona SDK 則是專注於手機平台上的 2D 遊戲引擎, 由於架構簡單學習容易,也是手機平台上的熱門開發工具。 僅管這兩套引擎的規模不同,不適合拿來比較,但若是以「開發手機平台的 2D 遊戲」作為前提,我倒是可以從個人經驗中做出一些分析。Unity 本身是 3D 引擎,我會以 Unity 加上 ex2D 這套功能強大的 2D plugin 來進行比較。 * * * * * * 基本功能 Unity + ex2D Corona SDK Sprite ○ ○ Sprite Animation ○ ○ Texture Atlas ○ ○ Bitmap Font ○ △ Unicode Font × ○ 2D Primitives × ○ Physics ○ ○ Layer ○ ○ Clipping ○ ○ 9-Patch ○ △ Unity+ex2D 與 Corona 都提供了基本的 2D 遊戲元素:sprite、texture atlas 與連續圖動畫等,但其它方面的功能則略有出入,以下針對不同的地方做說明。 Bitmap Font Bitmap font 意指把字型畫到 texture 上,在遊戲中若要顯示文字,可直接用 texture mapping 的方式顯示出來。最流行的工具就是 BMfont,只要指定好字 型,這個小工具可以幫你產生 texture。 ex2D 支援 bitmap font,可以直接讀取 BMfont 產生的結果。Corona 並沒有 直接支援 bitmap font,但因為它支援 texture atlas,只要自己寫一支讀取 BMfont 輸出檔的 Lua script,就能在遊戲中顯示 bitmap font。而這件事當然 有人做過了,在 Corona 的論壇上可以找到別人寫好的 bitmap font 模組。 (只是有些 bug 要自己修正) Unicode Font 若想使用 bitmap font 顯示中文或日文字型,理論上是沒問題的,然而這類文 字的字集太大,往往沒辦法全部畫在一張 texture 內。儘管 BMfont 可以處理 unicode font,甚至也能把字型打散畫到多張 texture 上,ex2D 卻不支援這 種包含多張 texture 的 bitmap font。因此目前 ex2D 無法顯示任意的 unicode 文字。 Corona 則具備了呼叫作業系統畫出字型的能力。由於 iOS 與 Android 都內建了 unicode 字型,使用作業系統內的字型檔不但可以正確顯示文字,而且所需要的 記憶體資源也遠少於 bitmap font。而且如果對作業系統內建的字型不滿意,你 也可以使用自己的 ttf 字型檔來畫字。 Unity 4.0 將會改進 3.5 的缺點,提供顯示 unicode font 的功能。 2D Primitives Corona 除了畫出 sprite 以外,也額外提供了一些常見的 2D 向量圖形元件, 包含圓形、長方形、圓角長方形、直線等。當你想快速畫出一些簡單的圖形時 相當有用,而且需要的資源相當少。 ex2D 不提供這樣的功能。 Clipping ex2D 可以針對一群物件設定顯示範圍,超過範圍的部份不會被畫出來。若要實 作可捲動的視窗元件,這個功能相當有用。 [感謝 linjack 補充] Corona 則是使用 bitmap mask 的方式進行 clipping,你可以使用一張灰階圖 片當作顯示物件的遮罩。這個遮罩不但可以限制繪圖範圍,也能夠控制觸控事件 的範圍。 9-Patch 9-Patch 主要用在畫出帶有邊框的元件。這些元件具有不同的大小,在縮放時 只有中間的部份會縮放,邊框則需維持原本的寬度。一般來說我們只需要給一 張如左邊的圖片,並且指定好邊框與角落的寬度,支援 9-patch 的系統就可以 畫出不同大小的邊框。 ex2D 支援 9-patch,只是它把這功能稱之為 SpriteBorder;Corona 則沒有直 接支援 9-patch。但同樣地,你可以把 9-patch 視為 texture atlas,然後自 己寫 script 去縮放它,自己實作這個功能花不了太多時間。 記憶體最佳化 由於手機上的記憶體資源相當寶貴,兩套 engine 都提供了一些方法來節省記 憶體,但兩邊的解決方案都說不上良好。 Unity 支援手機上各種常見的壓縮格式:PVR、ETC、DXT、ATC 等等,壓縮後的 圖片占用記憶體量會大幅縮小。然而 Unity 缺少了以下的功能: 1. 自動針對不同的 GPU 載入不同格式的壓縮材質。在 iOS 上因為 GPU 全 部都是 PowerVR,所以都用 PVR 格式是 OK 的,但在 Android 上因為使 用的 GPU 各不相同,但一張 texture 卻只能選擇一種壓縮格式,這實在 非常麻煩,良好的 engine 應該幫開發者解決這個問題。 2. 自動針對不同解析度的螢幕載入不同大小的圖片。不要說是 Android,在 iOS 上螢幕解析度也是大不相同--從 480x320 到 2048x1536,若要同 時支援 New iPAD 與 iPhone 3GS 將會非常麻煩,尤其 3GS 的記憶體只 有 256MB。 3. 使用遞色法(dithering)縮減圖片容量。帶有透明度(alpha channel) 的圖片若使用 PVR 進行壓縮,結果往往不甚理想。另一個解決之道是把 圖片轉成 RGBA4444 的格式,然後藉由遞色法讓圖片品質不致於大幅降低。 雖然 RGBA4444 占用的容量比 PVR 要大,但遞色法產生的結果有時比較 能讓人眼接受。 Corona 支援上述的第 2 點,也就是針對不同的螢幕解析度去載入不同大小的 圖片。但是 Corona 不支援材質壓縮,也不支援 RGBA4444 的圖片格式。 遊戲編輯器 Unity 提供了功能強大的遊戲編輯器,即使是沒有程式背景的美術人員也可以 操作編輯遊戲中的物件,這對於設計關卡或編排 GUI 來說相當方便。 Corona 只提供了模擬器讓程式設計師預覽遊戲過程,但官方網站已宣佈他們即 將推出 GUI 編輯器。 我個人對於整合式的遊戲編輯器抱持比較保留的態度。誠然 Unity 的編輯器超 級強大,而且還可以定義自己的 asset、設計自己的 asset 編輯器。但另一方 面也導致光看程式碼無法理解遊戲架構的現象。若想要在 Unity 中寫出易讀易 維護的程式,可需要下一番功夫。 其它功能 Corona 提供了許多手機遊戲的常見功能,包括社群網路整合(Facebook、 GameCenter、OpenFeint)、行動廣告、In-app Purchase 等等。 Unity 僅內建 GameCenter,其它功能需要透過 plug-in 的方式來擴充。 價格 Unity (Pro) Corona SDK iOS 400 (3000) 199/year Android 400 (3000) 199/year ex2D 25 – Prime31 50~200 – 全部 875~1025 (4575~4725) 349/year Unity 分為普通版與專業版,普通版可以免費使用,但若要製作手機遊戲就 必須額外加價,iOS 與 Android 平台各為 400 美金。Unity 專業版本身則 是 1500 美金,但也不包含手機平台,若要再加入手機平台的專業版功能, 則一個平台要再加 1500 美金。 Unity 專業版所提供的額外功能大多以 3D 遊戲為主,因此普通版加上 ex2D 即可滿足 2D 遊戲的需求。但若還要購買其它手機遊戲的常見功能:Facebook 整合、in-app purchase、行動廣告等 plug-in,大約需要 50~200 美金左右。 相較之下,Corona 的價格顯得相當平易近人。它使用年費制,兩大平台都是 199 美金,若兩邊一起買還可以享有 349 美金的優惠,而且不需再購買 Facebook 等外掛套件。 當然,若使用時間超過三年,Corona 的價格就會超過 Unity 普通版。不過三 年對手機遊戲來說可是相當漫長的時間。 缺點 Unity+ex2D 與 Corona 都有一些很嚴重的缺點,若你有意要使用它們,請先仔 細評估這些缺點對你造成的影響。 Texture Atlas 錯亂 (ex2D) 若你有使用 texture atlas,就很容易遇到這個問題。ex2D 中每個 sprite 並 不是以檔名去記錄它們所使用的圖片,而是以數字記錄它在 texture atlas 中 的編號。如果你先編輯好場景,之後又去修改 texture atlas 改變了編號,那 麼往往會導致場景中的 sprite 錯亂。 這問題可說是相當致命,因為 texture atlas 不太可能一開始做好就不動了, 通常每隔一段時間都會有新的圖片加進去,舊的圖片也可能會因應企劃需求而 改變大小,每次更改都需要以人力確認所有場景與 prefab 中的 sprite 保持 正確的內容,浪費相當多的時間。 ex2D 的作者目前正試圖在架構上改善這個問題,但尚未有預定的解決時間。 無法擴充 (Corona) Corona 並沒有 plugin 的機制,無法針對它不支援的功能進行擴充。儘管它的 功能對手機遊戲來說是足夠的,但企劃如果不會異想天開,他就不叫企劃了。 對於需要額外擴充功能的開發者,Corona 提供了 enterprise license,但價格 需要直接與他們洽談,我不認為這價格會適合個人開發者或小型團隊。 不支援 APK Expansion File Google Play 有 50MB 的上架限制,APK 檔案必需小於 50MB。對於大容量的遊 戲,Google 提供了 expansion file 的方式,除了 APK 以外開發者可以另外 上傳兩個 expansion file,這兩個檔案將在玩家下載遊戲時一併下載。 Unity 和 Corona 在 build 時都沒有「產生 expansion file」這個功能。Unity 可以使用 asset bundle 把部份資源分離出主程式,但是與 expansion file 整 合的過程相當複雜;Corona 則是完全無解。 結語 儘管 Unity+ex2D 與 Corona 都有一些缺點,但不可否認的是它們都很適合快速 開發小型遊戲。Corona 的優點是程式架構單純,而且較便宜,內建功能相當完 整,很適合剛踏入手機遊戲的開發者。另一方面,若你非常需要圖形化的遊戲編 輯器,或是你需要一些 Corona 未提供的功能,那麼 Unity 是你的選擇。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 202.39.238.241
franknine:感謝分享 07/23 07:38
Hevak:對不同GPU那個我還以為是打包者應該要考慮的問題耶? 07/23 08:22
Hevak:不過無論如何感謝清楚整理分享 07/23 08:22
Unity 可以在 build 的時候選擇不同的材質壓縮格式 然後配合 Google Play 的 multiple APK 機制 讓玩家在下載時只會載到符合自己硬體的 APK 但這實在不是好方法 因為這些使用不同壓縮格式的 APK 必需使用不同的 version code 徒然增加維護成本 而且你也沒辦法拿去別的商城上架 (ex. Hami、S市集等) 連 Google 都建議你直接把不同的壓縮材質包進同一個 APK 中做出通用版本 如果要做出所謂通用版本,目前 Unity 比較可行的方法是使用 asset bundle 針對不同的壓縮格式產生 asset bundle 後 把 asset bundle 包進 APK 裡面 不過這還是會有一些問題就是了 比如說 asset bundle 內的檔名不能重覆 (即使不同資料夾) Unity 其實是個會讓人愈用愈生氣的東西 XDD
fasthall:之前有400元移動開發license免費申請XD 07/23 08:48
osanaosana:推 07/23 09:31
Hevak:哦哦,懂了,謝謝詳細解說XD 07/23 10:38
holymars:推推推推推推推推推推推!!!! 07/23 15:41
※ 編輯: littleshan 來自: 220.135.3.139 (07/24 10:20)
wangm4a1:推 07/25 01:04