1. 程式人生 > >使用Flash, HTML5, Unity進行web遊戲開發的現狀對比

使用Flash, HTML5, Unity進行web遊戲開發的現狀對比

原文地址:http://www.photonstorm.com/archives/2568/the-reality-of-developing-web-games-with-flash-html5-and-unity

如有翻譯不對的地方敬請指正,轉載請註明出處,謝謝



對於全世界Flash開發人員來說,今天是黑暗的一天。Adobe宣佈將放棄對移動裝置瀏覽器上的Flash進行技術支援。而在這之前,Adobe剛剛宣佈了要對公司進行大規模的裁員。雖然表面看起來這似乎並不是什麼嚴重的問題,但是這可能會使大家重新開始憎恨Flash。所以我覺得是時候把我的想法發到blog上了。


首先,我只關注web遊戲開發

。所以整篇文章都只關注這一特殊的主題。這不是一篇“Flash vs. HTML5”的文章,也不是一篇講述如何為移動裝置構建本地apps的文章。這篇文章只是純粹的關注於當今web遊戲開發的現狀。

這裡,我對比了Flash,HTML5和Unity,因為它們是目前唯一能可行的web遊戲開發平臺。我列舉了以下10個方面來對比它們:

  1. 開發流程(Workflow):如果真正建立一個遊戲,它是否足夠簡單?
  2. 平臺穩定性(Platform Stability):當你從開始到結束開發這個過程中,它會發生變化麼?
  3. 向後相容性(Backward Support):你的遊戲能夠一直執行10年麼?
  4. 移動支援(Mobile):你的遊戲能在移動裝置上執行麼?
  5. 分發(Distribution):如果沒有人玩,那麼你的遊戲沒有任何意義。
  6. 安全(Security):程式碼和智慧財產權的保護
  7. 盈利(Monetization):開發遊戲的目的就是為了掙錢
  8. Facebook:社交遊戲的角度
  9. 有多少人會玩你的遊戲
  10. 3D支援(3D Support):Stage3D vs. WebGL vs. Unity

我認為這些是每一個遊戲開發人員在評估一個新平臺時都應該考慮的方面。為使用Flash進行遊戲開發的新手和熟手總結了一些我的建議。

這篇文章很長,但是很重要,我希望儘可能多的覆蓋到相關知識點。文中我儘量使用事實和統計資料,而不是誇張的語句,從而使你能夠做出最好的決策。


技術分解

1. 開發流程(Workflow)


Flash:使用Flash來建立遊戲很簡單。現在有數不盡的資料,網站,教程,遊戲框架,開發庫,視訊和示例程式碼。對於開發工具,你可以使用免費的Flex,也可以花錢購買Flash IDE。Flash具有通用並且非常強大的向量渲染功能,這意味著你能夠建立文件尺寸很小的動畫。它擁有非常成熟的音訊支援,並且大多數Adobe應用程式,比如Illustrator,Photoshop,都能夠整合到Flash IDE當中。而且經過多年的開發,它還擁有很多內建的功能。


HTML5:JetBrains Astella這樣的編輯器使得編碼不在痛苦。還有一些很好用的debug工具,測試時只是簡單的啟動瀏覽器就可以了。現在也有大量的講HTML5遊戲開發的書籍,網站,線上資源以及示例程式碼。用於建立HTML5遊戲的工具是免費的,但是同樣還是有一些商用的遊戲開發軟體,包括GameMaker HTML5Game Salad. 如果你希望能夠更加快速並且更少的涉及底層原理時,還有一些專門用於遊戲開發的庫供你呼叫,比如ImpactJS

Unity:Unity擁有一個非常優秀的Visual Editor並且集成了主流的3D應用。家庭使用的basic版本是免費的,你也可以在公司使用它,每年需要繳納不到100k美元的費用。專業版售價1500美元起,隨著整合不同的外掛而增加相應的價格。一旦你購買了該軟體,便會提供給你大量可用的書籍和學習資源,所以學習應該不是問題。

2. 平臺穩定性(Platform Stability)

Flash:構建在Flash平臺之上的遊戲是作業系統無關,瀏覽器無關的。它不會關心是老舊版本的IE還是最新版本的Chrome,對於提供了Flash Player的平臺來說,這些體驗是相同的。Adobe每年通常每年都會發佈一個新版本的瀏覽器,在一年之中也會發布很多更新。


HTML5:HTML5處於一個持續變化的狀態。這種情況下會產生兩個副作用:第一,有可能因為瀏覽器升級導致你的遊戲不能正常執行;第二點,你不能只關心一個平臺,你需要關心很多個平臺。使你的遊戲能夠正常工作於Chrome僅僅是個開始,你需要忙於IE,Firefox,Safari,跨作業系統,瀏覽器釋出版本樹中的各個版本。維護代價同樣不能低估。最大的技術挑戰是包括音訊支援,渲染速度不一致的問題。


Unity:Unity的web player與Flash具有相同的優點。在提供了外掛的平臺上,你的遊戲可以執行的很好,而不用去關心瀏覽器。Unity本身也是在不斷的改進過程當中。

3.向後相容性(Backward Support)


FLash:十年前使用AS1開發的遊戲仍然可以執行在現在的Flash Player 11上。對向後相容的支援是非常優秀的。


HTML5:對於HTML5來說,進行向後相容性的對比有一點不公平,因為HTML5一直在不斷改進的過程當中,這意味著,如果有一些東西不符合W3C標準的話,那麼它很快就會被廢棄掉。


Unity:Unity並不能夠向後相容,原來我以為它會像Flash一樣能夠向後相容,但是目前來看,似乎並不是這樣的。

4. 移動支援(Mobile)


Flash:目前為止,除了iOS以外的移動裝置對Flash外掛都支援的很好。但是Adobe官方已經宣佈Flash外掛不再對移動裝置進行支援。所以對於移動支援這一點,已經完全不用考慮Flash了。你也許可以通過AIR來建立移動應用,但是這並不屬於web遊戲,已經超出了本文討論的範疇。Stage3D也不在本文的討論中,隨著很多硬體廠商/執行商的合併,已經逐漸過時的AVM,對於Adobe來說,這仍然是一場艱難的戰役。另外在Adobe公司進行結構調整的過程中,公司將Oliver Goldman從AIR團隊調整到了雲專案中。Oliver在AIR團隊中是絕對核心的人物,對於這種事情就看你怎麼理解了。


HTML5:HTML5對移動裝置的支援越來越強,在iOS5上看到了明顯的效能提升。隨著移動瀏覽器能夠訪問到一些諸如觸控事件,加速度事件等特性,我能預見到HTML5將會越來越好。當然,你還是必須面對不同的螢幕解析度等問題,但是這些並不是HTML5特有的問題。


Unity:目前沒有移動裝置的瀏覽器支援Unity外掛,因為Unity的強項在於開發移動裝置上的本地遊戲。


5. 分發(Distribution)


Flash:Flash遊戲可以打包進一個單獨的,容易進行保護的SWF檔案裡,這個檔案可以通過站點上的HTTP協議進行傳輸。也可以繫結到一個專門的URL上。Flash遊戲商店完全是根據遊戲的發行量來進行運作的,實際上,你的遊戲發行的越廣,你掙的就會越多。


HTML5:目前沒有一個跨平臺或者一致的方式來打包HTML5遊戲。最大的遊戲入口網站還不允許開發人員上傳自己的HTML5遊戲。我覺得這可能是因為需要呼叫外部的js檔案可能會導致一些安全問題。這意味著HTML5遊戲只能夠通過特定的URL進行傳播或者嵌入到一個iFrame裡。最終可能由你或者你的贊助商來為你購買主機。很多Flash遊戲的傳播方式都是一些網站首先在入口網站上下載SWF檔案,然後放到自己的主機上。這其實並沒有聽起來這麼糟糕,實際上這正是多數Flash遊戲開發者賺錢的方式。網站允許使用設定了sandbox parameter引數的iFrame,但是這回阻礙HTML5遊戲使用一些像本地儲存,訪問表單等很有用的特性。


Unity:Unity與Flash和相似,可以把遊戲打包成一個單獨的檔案,然後能夠將它上傳到像Kongregate這樣的網站上。

6. 安全(Security)


Flash:雖然SWF檔案並不完美,但是至少它會把你所有的資原始檔和程式碼打包到一個檔案中,這個檔案需要對打包技術很瞭解或者使用第三方應用程式進行破解。市場上有很多檔案保護服務和程式碼混淆軟體可以對SWF檔案進行保護。通常這基本可以抵禦業餘的黑客和盜賊。


HTML5:Html5遊戲的程式碼可以混淆,但是不能使用任何沒有加密的客戶端進行加密。程式碼在記憶體當中執行時,很容易被改變。圖形和音訊資源很容易被盜用,可以使用Chrome或者Firefox瀏覽器的查詢物件功能進行檢視,甚至直接通過快取資料夾進行瀏覽。這個問題完全依賴於你的遊戲和你的客戶。評論中有人認為有很多方式來保護HTML5的資源,並且他認為FLash中的資原始檔也會像HTML5中的資原始檔一樣容易盜取。我不想開始參與檔案保護的辯論,但是我想說任何保對HTML5中資原始檔進行保護的方式都可以用於Flash中。


Unity:與Flash很相似。如果有人下定決心準備盜用你的資原始檔的話,那麼他一定有很強的技術功底。總的來說Unity可以防禦一些業務黑客和竊賊(source)。

7. 盈利(Monetization)


Flash:Flash遊戲有很多很好的方式來盈利,包括:遊戲贊助,遊戲中植入廣告,與入口網站進行分層,廣告分層,遊戲交易以及為客戶進行打工的遊戲。我認識一些開發人員,他們完全不需要贊助商,遊戲分層和廣告收入分層同樣可以給他們帶來現金。網路中有很多釋出廣告的API,甚至只需要簡單的上傳你的遊戲,就能夠長期的參與分層。


HTML5:可以在遊戲中植入廣告,比如在遊戲中放入Google的廣告。我目前還沒有發現任何形式的HTML5遊戲贊助市場,或者是收入分層的形式。像Fortumo遊戲交易的形式存在並且已經很健全,當然你也可以專門為客戶開發HTML5遊戲。


Unity:我對這點知之甚少,希望能有讀者為我補充一些。我期待會有一些廣告API,儘管Unity的目標是移動裝置而不是Web。

8. Facebook


Flash:大多數Facebook上的遊戲都是由Flash開發的。Sims社交網路每月有3600萬玩家在玩Flash遊戲。新版的水果忍者也是Flash開發的,並且他們還宣稱即將使用Flash Player 11上的新特性。大部分的Zynga遊戲也都是Flash的。原因很簡單,因為他們很容易僱傭到Flash開發人員和使用簡單的開發流程。開發人員很容易直接通過Facebook來賺錢,因為Facebook提供了很多第三方服務和API。


HTML5:我努力尋找一些使用純HTML5開發的頂級的Facebook遊戲,一定會有一些的,所以如果你知道的話,請貼上鍊接。Zynga在2010年就收購了Dextrose,準備在Facebook上開發HTML5遊戲,但是至今也沒看到什麼結果。原來的文章提到“已經有一些遊戲公司宣佈準備在Facebook上釋出HTML5遊戲,比如OMGPOP和他們的Gem Rush。每日使用者量只有10人。”但是有讀者提到Gem Rush只是使用了HTML5的API,而遊戲本身是Flash開發的。因此我的結論是,目前為止,Facebook上的主流遊戲基本還都是Flash的。


Unity:Unity遊戲在Facebook上似乎也有一些盈利。這些遊戲並不像Flash一樣無處不在,但是同樣還是獲得了很好的支援。像 UberStrike (每月有83萬玩家)以及King’s Bounty (每月兩萬玩家) 等遊戲,顯示瞭如果遊戲有足夠的吸引力,Facebook使用者並不反對安裝Unity外掛。

9. 有多少人會玩你的遊戲?


Flash:事實上,由於桌面使用者量是巨大的,而且每一個訪問訪問網際網路的使用者都可能玩你的遊戲,所以這個統計量是巨大的。一個標準的Flash遊戲大概在第一年會有差不多2~3百萬的使用者訪問量。一些比較好的遊戲訪問量要比這還多。我們的遊戲Home Sheep Home從釋出以來每天大概有100萬的玩家。上線之後的18個月內,大概有1億零8百萬使用者訪問玩過這遊戲,玩家數量驚人。加上Facebook上的巨大的玩家群,你可以想象這一秒中就有成百上千的人在訪問你的遊戲。玩家完全不是你的問題。


HTML5:老實說,我確實沒有找到相關的資料,可能是因為技術還是太新了。也沒有用HTML5做出來的好遊戲。很高興的看到了讀者提供了一些連結。技術上你可以認為潛在的使用者群為十億以上,但是我還是試圖讓使用者自己挖掘有多好玩家。


Unity:雖然Unity宣佈了他們玩家的佔有率,但是並沒有統計資料來支援它。如果你統計Kongregate上的Top Unity Game,你會發現總共只有577,000個玩家,而頂級的Flash遊戲有2500萬玩家。實際上前100名的Flash遊戲玩家數量全部都在250萬以上。

10. 3D支援(3D Support):Stage3D vs. WebGL vs. Unity


Flash:Flash Player 11引入了Stage3D,它本質上市OpenGL ES 2.0。Adobe為了實現它,進行了專門的工作,但還是有很多需要注意的地方。首先,在嵌入遊戲時需要使用wmode=direct引數。多少主要的遊戲網站目前並不支援這個引數,所以如果你的網站沒有設定這個引數的話,你的遊戲不會再3D硬體上執行。其次,令人沮喪的是黑名單上的GPU並不支援Stage3D。2009年以前的驅動程式都無法支援。最常見的就是Intel GMAs(on-board graphics chips)也無法工作。2007年銷售的PC機種有90%都使用了Intel GMAs。當然Adobe必須在這之間做出一些選擇,但是Flash吸引人的地方就是平臺無關性,所以如果你使用了Stage3D,這就意味著你放棄了很多潛在的玩家。所以,你必須謹慎的選擇這條路,而且,當你選擇這條路的時候你應該確保你能夠盈利。


HTML5:選擇HTML5的話,我們可以使用WebGL。它與Stage3D在技術層面上很相似,它是通過純粹的OpenGL介面實現的,但是它在一些關鍵領域存在一些缺點:不能夠全屏(實際上Firefox剛剛宣佈了支援HTML5全屏模式—譯者注),不能夠捕捉滑鼠(Flash Player 11.2已經支援),不能夠多重渲染目標等問題。Autodesk Blog上有一篇文章很好的討論了這些問題。這些都是短期的技術挑戰,很快就能夠克服。WebGL的最大問題是MicroSoft目前並不支援它。MicroSoft不是WebGL工作組的成員,而且也不對WebGL的格式提供任何支援。根據瀏覽器使用量的統計來看,IE仍然佔據主要地位,而且統治地位不會再短時間內改變。


Unity:Unity同樣也支援3D。在我們有限的測試裡,我們的遊戲能夠完美的執行在那些不支援Stage3D的黑名單裡的GPU上面。當然,你同樣面對著外掛問題。當然,如果你認為你有足夠好的市場,那麼Unity是目前最好的3D解決方案。Unity宣佈,他們很快會支援將Unity遊戲匯出到Flash中,但是並不會遇到Stage3D的GPU黑名單的問題。我很希望付錢給Unity,讓他們在不久的將來支援將Unity遊戲匯出到WebGL。




Adobe會支援Flash多久?


讓我們來重點關注一下Adobe今天釋出的新聞中的一些片段,我刪除了一些無用的內容:

我們已經著手開發Flash Player 12…我們也會加快與W3C和Webkit之間的合作,儘快的給HTML5帶來相似的功能,我們將會為Flash開發一個新的功能,使其能夠平滑的過度到HTML5

他們也聲明瞭Adobe認為Flash Player主要用於“高階遊戲”和“高階視訊”領域。

你可以以各種角度來理解它。一方面,這聽起來好像是,所有即將給Flash新增的新功能都會提交給W3C和Webkit團隊,這樣,我們就能看到這些功能被新增到HTML5當中。另一反面這聽起來又好像是,他們將會修改FLash IDE,使得它能夠構建HTML5的專案,而不是匯出成一個SWF檔案。所以有可能我們會看到它製作的動畫會到處成SVG和Sprit Sheet。


Thibault Imbert今天的部落格說我們應該明白,放棄Flash對移動裝置的支援是一件好事,這將使得Adobe更加專注於AIR和桌面版的Flash Palyer,顯然沒有人會使用Flash為移動瀏覽器上構建任何應用。我並不反對他的觀點,但是我覺得問題是雙重的:首先,人們會認為Adobe正在銷燬Flash,“移動”一詞很有可能被感官主義者從新聞頭條中漏掉,這隻會是反對Flash的火焰隨著蘋果公司的點燃而燃燒開來。儘管如此,我最大的問題是:是否有人為移動裝置開發Flash遊戲者並不重要,但是重要的是把移動裝置上的Flash外掛移除,這強制灌輸一種思想,web是一個缺少Flash的領域。


智慧手機市場確實非常巨大,並且目前手機遊戲的數量要比掌機遊戲多的多。很多人不會再玩你的Flash遊戲,這回在客戶群中產生碰撞效應。一些已經動搖的客戶逐漸意思到,他們網站上的任何Flash元素(遊戲,視訊,互動)都無法在iOS上執行時,他們會更加害怕這些元素很快也無法在除了桌面以外的其他裝置上執行。你可能不在意放棄支援iOS時帶來的一點小損失,但是你絕對不能忽略那上百萬的使用者。


這對於我們來說可能不成問題,因為我們永遠都不會為移動裝置開發Flash遊戲。 But you don’t upset the apple cart like this without bruising all aspects of the Flash world in the process.(這句沒明白,大意是說會對動畫界產生很大的影響)。


可能他發表的結論當中最打擊人的是這部分:

長遠來看,我們會繼續為了Flash雄心勃勃的未來而努力工作,正如我們今天說過的,實現的細節可能有所改變。我們相信Flash的DNA並不是在這些實現的細節裡,但是我們保證,我們會努力使得Flash能夠更加簡單的創造出最多的令人驚豔的使用者體驗。


這是一個對外的解釋,但是從官方釋出的訊息來看,我覺得Adobe自己都覺得看不到Flash Player外掛在桌面應用上的未來。我希望能夠看到從AS3到JS的跨平臺編譯的嘗試,或者一些本地的JS和SWF之間的相互呼叫。如果有足夠多的Flash Player特性得到Webkit的支援,那麼將AS3匯出到HTML5將會更容易一些。


我確信AIR仍然會繼續存在,這是遊覽器外掛的未來。

Flash開發人員應該做些什麼?


認真考慮,停下來並評估現在的局勢。


Flash還沒有死,而HTML5也沒有為真正用來做web遊戲開發做好準備,我指的是那種真正用來賺錢的遊戲。我們正在經歷一個轉變的時期,現在很可能是Flash遊戲的頂峰。現在有比以往任何時刻都多的Flash遊戲釋出,這應該是一個印證。我看到了又HTML5的遊戲正在逐漸向我們多年前建立的一些遊戲靠攏,當然,目前看來還不要緊。


當然,這都是書面上說的。Flash Player外掛像綁了一根有很長導火線的炸彈一樣,他正在燃燒。


我期待HTML5逐漸蠶食Flash遊戲的低端市場。它還沒有足夠的能力替代我們今天建立的所有Flash遊戲。但是它可以很容的從低端遊戲做起,那些不太複雜的,更容易構建的遊戲。發行和盈利的方式可能很多,但是我們希望能夠為那些堅持使用HTML5的使用者建立這些新遊戲。這種情況發生的越多,HTML5侵蝕的就越厲害。


在剛才的第10點中,我們對討論了Stage3D vs. WebGL,但這只是由於WebGL本身存在一些短期的技術問題以及MicroSoft的立場問題。聽起來好像是不能解決的問題,但是他們已經改變的方向(Silverlight?),並且IE已經逐漸被淘汰。也許淘汰IE需要很多年,但是這正在發生。

我的意見


如果你是一個初級開發人員,那麼你完全沒有必要擔心這些。繼續學習如何使用Flash開發遊戲,因為遊戲開發過程當中使用的技巧是通用的。你將會遇到的邏輯問題,以及你需要關注的處理池和用於行為很少是特定與某個系統的。你學到的東西是各個環境中都通用的。現在,你開發了一個Flash遊戲的話,你很容易把它賣出去,並且會有很多人來玩你的遊戲。這將會提升你的信心。完成你的任務比選擇平臺更加重要。


如果你是一個遊戲老手,那麼,繼續做你在做的事情,並經你需要掙錢。繼續創造那些令人驚奇的遊戲,並陶醉在百萬玩家享受你的遊戲的喜悅當中,當然還會在這些客戶中賺錢。

但是與此同時,你應該開始學習Javascript和HTML5。(或者你不能忍受的話,可以開始學習Unity)


你不知道寫下這個句子的時候我有多麼的痛苦,從AS3到Javascript是倒退了一步,無論你如何編寫。


那麼為什麼還要花時間來學習Javascript呢?因為我不相信我們能夠看到一個工具可以將AS3轉換成HTML5,只是不能將遊戲轉換的足夠好


那麼,如果聚會結束了,Adobe開上了大門,你希望你是那個手上握有開門鑰匙的人麼?

深入閱讀


Ben在Playtomic寫過一篇很好的文章,主題是Flash遊戲開發人員如何擾亂遊戲網站目前的狀態。


Grant Skinner在為移動裝置上的Flash Player舉行葬禮時分享了他的想法。

更新—–新的連結和文字


這裡收集了一些值得閱讀的新聞連結,這些都是在我發表本文時發生的新聞。


黑莓(Blackberry)宣佈他們將會繼續支援Flash,但是他們在總結全文的時候,推薦大家去學習HTML。


Pritham Shetty,Adobe視訊解決方案的副主席,發表博文宣告Adobe將會繼續支援桌面版的Flash。但是沒有說具體會支援多久。


Ben Forta是Adobe公司Evangalism平臺的主管。在他的部落格中,他回顧了Flash對web發展產生的幫助。這篇文章寫的很好,但是有超過25個評論強調了現狀。


看起來在Adobe結構調整的時候,將Oliver Goldman從AIR團隊移動到了雲專案。他是AIR團隊的關鍵人物,對於這件事,仁者見仁智者見智。


R Blank寫了一篇叫做“訊息失敗的案例學習”的文章,提出了一些很好的點。


Mike Chambers澄清了整個Flash專業版IDE團隊都被解僱了的傳聞。他們仍然在Adobe開發IDE,但是聽起來他們好像現在更加關注與HTML5的內容。還有一個很令人困惑的訊息是,我在他的blog上留言問一些IDE未來的發展情況,他只是簡單的說“你今天使用Flash做的很多東西,未來都可以用HTML5實現。”我很感激他的誠實,但是並不嫉妒他的職位。


Doug Winnie是一個被Adobe解僱的社群經理,他的文章熱情,溫暖又令人苦惱。看完他的文章你好像只有兩個感覺:1)他不應該被解僱,以為內很難找到像他一樣有激情的;2)他揭露的事情是難以置信的。