在此次WWDC的游戲相關(guān)視頻中,蘋果再一次展現(xiàn)了它非凡的技術(shù)整合和持續(xù)創(chuàng)新能力。除了繼續(xù)完善已有的2D游戲框架SpritKit, 3D游戲框架SceneKit和全新的圖形渲染API Metal 外,今年還新增加了GamePlayKit,ReplayKit和Model I/O三個新框架。
GamePlayKit給游戲開發(fā)者帶來了全新的游戲架構(gòu)(“實體組件系統(tǒng)”)和一些通用模式(比如:狀態(tài)機, Goal-agent-behavior 系統(tǒng)等),同時它還提供了大量游戲算法,比如尋路算法,模糊邏輯和規(guī)則系統(tǒng)等。
ReplayKit可以讓玩家在游戲中錄制游戲視頻,并且可以添加語音評論,然后通過社交網(wǎng)絡(luò)分享出去。
而Model I/O框架,主要是用來處理3D資源和數(shù)據(jù),同時可以給一些資源做離線處理,提高游戲運行時性能。
SpriteKit新功能
SpriteKit是蘋果在2013年推出來的2D游戲開發(fā)框架,它最初的設(shè)計很多來自Cocos2D-iPhone項目,特別是API方面,幾乎和Cocos2D-iPhone沒有差別。得益于此,Cocos2D用戶可以用很小的成本轉(zhuǎn)到SpriteKit上面來。
在去年的WWDC中,蘋果推出了一系列重磅級功能特性:物理集成,XCode資源打包、實時編輯器,SceneKit 3D框架,Metal圖形API等,這讓SpriteKit成為了開發(fā)iOS/OS X平臺上的游戲的首選游戲框架。
今年,蘋果繼續(xù)發(fā)力,添加了3個新的節(jié)點類型,同時還完善了整個游戲開發(fā)流程和工具鏈支持。
SKCameraNode
此類模擬游戲里面的照相機,它可以定義游戲的可見視圖,同時它也是一個node,可以對它進行縮放,旋轉(zhuǎn)和平移等操作。此類是開發(fā)者繼去年 WWDC后最希望實現(xiàn)的功能,對于實現(xiàn)一些大地圖的冒險類游戲和RPG游戲非常有幫助,可以給主角添加一個SKCameraNode子節(jié)點,然后游戲視角 就會跟隨主角的移動而移動了。另外,游戲里面可以支持多個SKCameraNode.
SKAudioNode
此類可以實現(xiàn)基于位置的音效,環(huán)境音效和沉浸性音效。可以想像一下,一顆導(dǎo)彈向你的主角飛過來,聲音由遠及近,當導(dǎo)彈離你的主角很近時,甚至可以聽到導(dǎo)彈尾部噴氣的聲音,這種游戲音效會給玩家?guī)矸欠驳穆犛X感受。
SKReferenceNode
此類是SpriteKit的一個亮點,它可以實現(xiàn)已有組件的序列化,支持數(shù)據(jù)驅(qū)動式的游戲開發(fā)。
配合XCode,序列化的組件可以被當作游戲資源在各個不同的工程和游戲里面重用。
而且它會自動Cache,同樣的文件不會被加載多次。對于一些復(fù)雜的場景和組合動作序列,當需要重用它們的時候,SKReferenceNode是個大殺器。
Metal支持
目前iOS 9全面支持Metal,已有的SpriteKit游戲跑在iOS 9上面,不需要做任何修改即可享受Metal帶來的性能提升。如果你的設(shè)備支持Metal,那么它就會使用Metal,反之則切換到OpenGL ES.
SpriteKit 相關(guān)工具
一個好的游戲框架離不開一個好用的工具支持,游戲開發(fā)者可以通過工具快速地進行迭代式開發(fā)。蘋果一直致力于完善SpriteKit的工作流,讓開發(fā)者可以更快速地開發(fā)游戲,同時讓玩家可以不用關(guān)心技術(shù)細節(jié),只需要專心游戲玩法即可。
今年WWDC XCode工具支持方面主要有以下幾點:
資源分類( Asset catalog )支持,開發(fā)者可以更精確地控制不同設(shè)備使用的資源分辨率,最重要的是,玩家在下載游戲到設(shè)備里面時,只會下載與其設(shè)備分辨率匹配的資源。
按需加載資源,通過給不同的資源設(shè)備Tag,可以指定某些場景和關(guān)卡只加載特定Tag的資源。
XCode快速預(yù)覽:支持在Playgound里面使用Swift編寫一些測試代碼,然后快速預(yù)覽效果。不需要額外的編譯,立馬就可以看到API的使用效果,這對于測試一些API和驗證一些想法非常有幫助。
2D時間軸動作編輯器:這個應(yīng)該算是SpriteKit的大殺器了,它是一個功能完善的2D動作編輯器,可以支持實時預(yù)覽動作效果,并且同時支持2D和3D。
數(shù)據(jù)驅(qū)動:SKReferenceNode可以讓可重用的游戲組件數(shù)據(jù)化,讓玩家可以用更少的代碼來完成游戲開發(fā)。
小結(jié):
整個SpriteKit在性能,工具和易用性方面都有了較大的提升,另外,配合SceneKit,開發(fā)者可以更容易地開發(fā)3D休閑類游戲了。
SceneKit新功能
SceneKit是蘋果為了讓游戲開發(fā)者更方便地開發(fā)3D游戲而推出來的,它支持iOS和MacOS X。
同時,它還完美支持粒子系統(tǒng),物理集成和SpriteKit。今年,蘋果改進了場景編輯器,同時對Metal的支持也更加完善了。
新的場景編輯器
新的場景編輯器的功能總結(jié)如下:
支持更多的3D文件格式: DAE,OBJ,Alembic, STL和PLY文件格式。
新的原生文件格式,使用NSKeyedArchiver來存取
Shader修改器和環(huán)境光遮蔽(Ambient Occlusoni)
天空盒(Skybox)和幾何修改器
SCNTechnique 支持
支持聲音節(jié)點
支持Model I/O(后面會具體介紹Model I/O是什么)
除了這7點以外,還有諸如compute shader, relfective cub map等功能。
Metal支持和 SKTransitions
新的SceneKit可以根據(jù)設(shè)備類型自動匹配是否使用OpenGL或Metal作為渲染后端,同時它支持SpriteKit的切換場景切換,制作SceneKit場景切換效果更容易了。
Metal 新功能及性能優(yōu)化
今年WWDC游戲相關(guān)視頻中,蘋果用了3個視頻介紹了Metal的新特性以及性能優(yōu)化方法,同時SpriteKit和SceneKit在iOS 9中都是默認使用Metal作為渲染API。Metal作為蘋果生態(tài)圈的高性能圖形渲染API,大有可能在將來某一天取代OpenGL的趨勢。
新功能介紹
這里簡單給大家介紹一下Metal的新功能,具體的細節(jié)還需要查看相關(guān)文檔和視頻。
新的內(nèi)存模型:它一共支持3種內(nèi)存模型,分別是共享內(nèi)存模型,私有內(nèi)存模型和托管內(nèi)存模型。
新的紋理壓縮格式(ASTC):
設(shè)備GPU 類型判斷:自動根據(jù)設(shè)備的GPU類型來判斷支持的特性集合。
MetalKit框架:讓Metal應(yīng)用開發(fā)更加簡單方便。
Metal performance shader框架:提供了一系列數(shù)據(jù)并行算法。
Metal調(diào)試工具:更方面地調(diào)試Metal圖形應(yīng)用。
Metal應(yīng)用程序瘦身:這一點和上面介紹的SpriteKit瘦身原理是一樣的。
MetalKit框架
MetalKit對于一些常見的應(yīng)用場景提供了高效的實現(xiàn),開發(fā)者可以用更少地代碼來開發(fā)應(yīng)用,并且開發(fā)出來的應(yīng)用性能和穩(wěn)定性會更高。
MetalKit提供了一個 MTKView 類,它統(tǒng)一處理了渲染一個Metal場景所需要的設(shè)置代碼,另外,它提供了一個紋理加載器,它可以從一個圖片文件中創(chuàng)建一個Metal紋理。最后,MetalKit完美支持Model I/O,讓3D模型的處理更加簡單。
Metal performance shader框架
Metal performance shader是一個為GPU提供數(shù)據(jù)并行算法的一個框架,目前只支持A8處理器。
它定義了一些類似操作CPU風(fēng)格的API,這樣可以讓GPU編程變得更加簡單。它提供了很多內(nèi)置的并行算法,比如蘭索斯重新取樣(Lanczos resampling),卷積函數(shù)(比如高斯濾鏡等),直方圖等。
Metal調(diào)試工具和最佳實踐
眾所周知,圖形應(yīng)用是非常難以調(diào)試的,而Metal在設(shè)計之初就考慮了多線程,而多線程的調(diào)試也是很困難的。因此,如果沒有好用的工具支持,調(diào)試Metal應(yīng)用將會變得非常困難。
此次,蘋果圍繞Metal提供了一系列好用的工具。比如:一個可視化的幀調(diào)試器,一個資源和狀態(tài)查看器,shader性能分析工具,集成的離線Metal編譯器等。
讀者可以根據(jù)WWDC中關(guān)于Metal性能優(yōu)化的視頻去了解更多詳細的信息。
另外,蘋果給我們定義了一些最佳實踐:
要盡早分析和經(jīng)常分析代碼
在最合適的時機去獲得Drawable對象。
盡可能基于GPU去考慮多線程渲染。
提前創(chuàng)建好一些耗時的對象并盡可能地重用這些對象,提前編譯好著色器程序。
小結(jié):
Metal已經(jīng)成了蘋果在3D圖形渲染的一張王牌,它的性能遠超OpenGL,開發(fā)者應(yīng)該全面擁抱它,利用它來開發(fā)出性能更好的圖形應(yīng)用和游戲。同時,使用Metal,也可以用更少的代碼來編寫圖形應(yīng)用,另外,它也會讓你的程序會更容易維護。
GamePlayKit介紹
GamePlayKit是今年WWDC游戲開發(fā)方面最大的亮點,它提供的實體組件系統(tǒng)將直接改變之前以繼承為主的開發(fā)游戲方式。另外,還為游戲開發(fā)提供了大量實用的算法與設(shè)計模式,iOS游戲開發(fā)從未如此簡單。
實體組件系統(tǒng)
實體組件系統(tǒng)是一種非常流行和先進的組織游戲邏輯的方式,采用它編寫的游戲代碼,更容易維護,更容易擴展,同時也更加靈活。
GKEntity 在實體組件系統(tǒng)里面,所有的游戲?qū)ο蠖急唤M織成游戲?qū)嶓w(GKEntity),它只是一個組件(GKComponent)容器,可以在游戲過程中動態(tài)地添加和刪除游戲組件。并且可以通過組件類型來訪問組件并更新所有組件。
GKComponent GKComponent是所有游戲組件的基類,它負責(zé)存儲游戲數(shù)據(jù),同時會隨著實體的Update方法來更新自身的狀態(tài)。所有的游戲邏輯被放置在 updateWithDeltaTime 方法中。
GKComponentSystem 組件系統(tǒng)是處理組件的容器,它包含了所有同種類型的組件,并通過統(tǒng)一的邏輯來處理這些組件。組件系統(tǒng)并不關(guān)心實體,它會透明地對象所有同種類型的組件并更新其狀態(tài)。
尋路算法
尋路算法可以讓你指定一些節(jié)點生成一個雙向連接圖,然后可以通過簡單的API調(diào)用找到任意兩個點之間的最優(yōu)路徑。所有的有向圖的基類是GKGraph,它是一個抽象類。它提供一些共用的邏輯,比如動態(tài)地添加和刪除節(jié)點,連接這些節(jié)點并找到任意兩個節(jié)點之間的路徑。
此外,GamePlayKit還提供了兩種特殊類型的圖節(jié)點: GKGridGraph 和 GKObstacleGraph 。GKGridGraph非常適合2D游戲里面的路徑查找。而GKObstacleGraph則可以設(shè)置一些障礙物,節(jié)點在尋路的時候,這些障礙物是無法穿越的。SKNode的邊界,物理剛體和紋理都可以當作障礙物。
狀態(tài)機
狀態(tài)機是游戲玩法的骨架,游戲本身就是由一系列的狀態(tài)機組成的。比如主角動畫,AI狀態(tài),UI切換,關(guān)卡切換等,這些都可以使用狀態(tài)機巧妙地解決。
GamePlayKit通過封裝了 GKStateMachine 和 GKState 類,把一些共用的邏輯全部抽象出來了,開發(fā)者再也不用為每一個游戲去開發(fā)單獨的狀態(tài)機了。
Goal, Agent和Behavior
Agent指的是會自已移動的游戲?qū)嶓w,它們通過Goal和Behavior來驅(qū)動自身的邏輯。Behavior是由一系列的Goal組成的,每一個Goal都包含有相應(yīng)的權(quán)重。Agent在與玩家進行游戲交互的時候,可以表現(xiàn)得更像人類,因為它們也會做決策。
以往只有在一些很復(fù)雜的游戲里面才會看到的AI,如今通過GamePlayKit,我們可以非常輕松地給自己的游戲也添加了。通過給游戲里面的怪物添加一些AI,能夠極大地增強游戲的趣味和粘性。
AI 策略(MinMax AI)
MinMax AI主要用于一些回合類游戲,比如象棋,圍棋,Tic-Tac-Toe等。它還能給人類玩家提供一些建議,比如告訴你下一步棋該怎么下。另外,通過計算時間的設(shè)置,AI可以定義不同的難度等級。
規(guī)則系統(tǒng)
規(guī)則系統(tǒng)可以讓你制作更加復(fù)雜的游戲AI,游戲世界的交互不再是“黑即是黑,白即是白”,而是以事先定義好的一定的規(guī)則去交互。游戲AI可以實現(xiàn)所謂的模糊邏輯,游戲怪物的活動可以根據(jù)定義好的規(guī)則系統(tǒng)去動態(tài)地調(diào)整和評估自己的行為。
隨機數(shù)發(fā)生器(Random Sources)
每個游戲都有一些特別的隨機數(shù)生成需求,而rand()函數(shù)只能生成一些偽隨機數(shù),并且可能跟平臺實現(xiàn)還有一些出入。作為開發(fā)者,我們需要一個與具體平臺無關(guān)的隨機數(shù)生成器,另外這個隨機數(shù)生成器還能產(chǎn)生符合一定數(shù)學(xué)分布的隨機數(shù)。
Demobots示例
這是一個非常有價值的游戲demo,里面幾乎涉及了GamePlayKit里面的大部分技術(shù),是一個值得深入學(xué)習(xí)的游戲示例。這里是 下載鏈接
小結(jié):
實體組件系統(tǒng)不是蘋果的原創(chuàng),但是這一次GamePlayKit巧妙地整合了已有的游戲開發(fā)框架,iOS游戲開發(fā)變得從未如此簡單和有效。配合強大的Swift和Xcode支持,更加如虎添翼。
ReplayKit和 Game Center
ReplayKit可以讓玩家在游戲中錄制游戲視頻,并且可以給這些視頻添加語音評論并且通過社交網(wǎng)絡(luò)分享出去。另外Game Center允許訪客模式,并且整合了產(chǎn)品服務(wù)器和沙盒服務(wù)器,這樣測試和開發(fā)基于Game Center的游戲就變得更加簡單了。
ReplayKit只有在iOS 9才能使用,另外開發(fā)者可以定制是自動在某些游戲場景開啟視頻錄制還是讓玩家自己選擇錄制時機。錄制完的視頻還可以被編輯和預(yù)覽,從此玩游戲不再孤單。
另外,訪客模式是不需要取得認證即可參與游戲的,訪客不會取得任何游戲成就,也不可以發(fā)布游戲得分。開啟訪客模式的游戲,玩家只能與其它運行iOS 9的玩家進行游戲。
Model I/O模塊介紹
Model I/O是用處理3D資源和數(shù)據(jù)的框架,我們可以通過Model I/O快速地加載和導(dǎo)出3D資源文件。另外,它集成在Xcode里面并且和可以非常容易地與GameKit API配合。它的主要功能特性如下:
支持多種3D文件格式的
可以對資源進行修改和Bake
支持3D模型三維像素化(Voxels)
集成Playground, Swift和Finder,并且能夠在Finder的Quick look里面預(yù)覽資源。
支持基于物理的材質(zhì)和光照
總結(jié):
從本次蘋果對游戲開發(fā)所做的改進來看,休閑社交游戲仍然是其主推的游戲類型。不過有了Metal的支持,在MacOS X開發(fā)AAA游戲也是完全有可能的。另外,主流的游戲廠商Unity和Unreal都聲稱直接了Metal,相信以后蘋果生態(tài)圈里面會出現(xiàn)更多高品質(zhì)的游 戲。
另外,隨著虛擬現(xiàn)實和現(xiàn)實增強的火爆,相信在不久的將來,蘋果也可能推出自家的VR設(shè)備。到時候,這些游戲開發(fā)框架和工具必將是您開發(fā)蘋果VR游戲的首選。
(審核編輯: 智匯張瑜)
分享