蘋果發布手游開發新工具GameplayKit,官方使用指南(中文版)

>>>  技術話題—商業文明的嶄新時代  >>> 簡體     傳統



在6月9日凌晨舉行的WWDC 2015大會上,蘋果宣布iOS 9的同時推出了兩個非常重要的工具,分別是GameplayKit以及ReplayKit,從該公司的介紹中來看,這兩個工具對于iOS手游開發者以及歐美游戲視頻相關領域可能會產生比較大的影響。


簡單的說,GameplayKit就是一個幫助新手開發者們在OS X和iOS平臺創作游戲的基礎工具和技術框架,可提供游戲資源、模塊、玩法設計以及系統規則方面的內容,并不包括視覺渲染等功能。因此,可能對于有些資深開發者們來說,支持多平臺發布、功能更為復雜的游戲研發框架或許會更適合。


而ReplayKit的細節透露較少,在蘋果的官網,我們可以看到,玩家們可以通過該功能在游戲中錄制、編輯并在線分享游戲,并沒有進一步的說明。


以下請看Gamelook整理的蘋果官方《GameplayKit 參考和編程指南》(由于篇幅限制,這里僅翻譯概念部分,想了解實例請移步蘋果官網,還可下載樣本游戲代碼):


第一部分:框架參照


提示:這是一個正在研發的API或技術的概要文件,蘋果公司提供這些信息主要是為了幫助你通過蘋果產品使用這些技術或者編程界面而做好計劃,該信息有可能會在未來發生改變,本文當中提到的軟件應該以最終發布的操作系統測試和最終文檔為準,未來有可能會提供新版本的文檔信息。


GameplayKit是一個面向對象的框架(Object-oriented framework),為在OS X和iOS平臺打造游戲提供基礎工具與技術。GameplayKit包括為設計游戲功能而提供的工具、可重復使用的架構,還包括為創造和提高玩法功能而研發的技術,比如角色移動和敵人的行為設計等等。


初識GameplayKit


GameplayKit框架包含了一些獨立的分支系統,覆蓋了游戲設計和研發的多個領域。


隨機化(Randomization):使用GKRandom協議、GKRandomSource以及GKRandomDistribution class,而且還有更多獨特的subclasses來增加游戲玩法的不確定性,同時不需要以增加BUG調試量為代價。


狀態機(State Machines):使用GKStateMachine和GKState class打造模塊化的玩法系統。


Minmax Strategist:GKMinmaxStrategist class為回合制游戲中的敵人提供AI設計,想要使用一個Strategist的話,你需要用GKGameModel協議以及相關協議來描述游戲玩法。


尋路系統(pathfinding):使用GKGraph和GKGraphNode class以及它們的subclasses來為你的游戲世界導航建模,并且為游戲對象找到可以使用的路線。


代理、目標和行為:GKAgent class提供模擬功能你可以通過GkGoal對象為游戲單位定制化移動行為規則,每一個class都為一個代理自動跟隨設計了高等目標。


規則系統:使用GKRuleSystem和GKRule class打造復雜的游戲邏輯,包括模糊推理(fuzzy reasoning)以及應急行為。


第二部分:GameplayKit編程指南


GameplayKit是為iOS和OS X平臺做游戲而研發的一系列基礎工具和技術,與更高級的SpriteKit以及SceneKit游戲引擎不同的是,GameplayKit并不包含動畫和視覺渲染等內容。GameplayKit主要是幫助開發者研發游戲的玩法并設計模塊化組件、用最少的努力做出可擴展的游戲架構。


GameplayKit功能


打造、改善和維護一個復雜的游戲需要非常好的游戲設計。GameplayKit提供一個實體組件架構,幫助你設計可以重復使用的玩法代碼,并為解決復雜的面向過程的代碼提供一個狀態機系統(State Machine System)。GameplayKit還包含了一些隨機化的工具,可以為很多種玩法提供基本的資源。


創作一款優秀的游戲還需要使用復雜的算法(algorithms)來解決很多常見的游戲玩法問題。通過GameplayKit,你不再需要寫自己的算法,而是可以直接使用GameplayKit提供的資源,這樣開發者就有更多的時間專注于把玩法做到更加獨特。


比如,你可以使用Minmax Strategist功能為回合制游戲打造AI系統、通過尋路功能為游戲角色設計導航路線,為高等級的游戲角色設置自動行走或者使用與代碼分離的規則系統并實現模糊邏輯推理(Fuzzy Logic Reasoning)。


由于GameplayKit在iOS和OS X系統中是獨立于高級游戲引擎而存在的,因此你可以拿它與任何可以做一個完整游戲的技術進行整合,比如做2D游戲用的SpriteKit、做3D游戲用的SceneKit或者使用Metal/OpenGL ES定制化的第三方游戲引擎。對于畫質要求不高的游戲來說,你甚至可以只用GamePlayKit和(iOS里的)UIKit或者(OS X中的)AppKit直接創作游戲。


隨機化


游戲中有很多玩法都是基于概率和機會。桌游中玩家用骰子決定移動步數、紙牌游戲有洗牌的玩法、街機游戲的敵對生物會在不可預測的時間出現、RPG游戲里的每一步動作都有成功或者失敗的可能、開放世界游戲里的背景角色會自然移動,這里實在有太多太多的例子可以佐證。意想不到的驚喜可以讓一款游戲變得更有趣,每一步都有變化的行為可以增加游戲的重復體驗價值,模仿自然界系統的元素可以讓游戲更加生動真實。


做一款依靠概率因素的游戲,通常需要使用一個虛擬隨機數字生成器,或者說是隨機資源。然而,并非所有的隨機資源都是平等的,如果使用不當就達不到開發者的目的。在一款游戲中打造優秀的虛擬隨機行為,你通常需要做到以下特點:


隨機性:一個隨機數字生成器應該產生不可預測的行為(至少看起來是這樣),但是,隨機性是怎么衡量的呢?計算機化的虛擬隨機數字生成器是基于無序的有窮數列。最終,這個數列終究會發生重復,至于在重復之前可以生成多少隨機數字,完全取決于資源使用的算法。更重要的是,當用二進制來看生成數字的時候,有些數字甚至是可以預測的,當然這取決于隨機資源的算法。


游戲性能:更為復雜的算法可以產生更多的不可預測性,但代價是更多的處理時間。如果你的游戲為每一幀都使用多個隨機數字,并且需要保持60FPS的運行幀率,一個復雜的隨機源可能就會讓你的游戲變得很慢,在選擇隨機源的時候,一定要衡量隨機性與游戲性能的關系。


決定機制:高質量的游戲都需要測試,但真正的隨機性會讓你很難創造一個特定的測試環境。一個隨機源(Random Source)應該在游戲中為玩家們保留表面上的不可預測性,但同時要允許多次重復之后的特定結果。決定機制隨機源對于聯網游戲來說是必要的,你需要確保隨機游戲玩法對于所有人都是平等的。


獨立性:由于隨機源是基于一個數列,所以下一個出現的數字一定程度上取決于已經出現過的數字。然而,一款游戲通常包含多個隨機元素。比如說,如果一款游戲在玩法和美觀方面都加入了隨機性,比如競技游戲中,玩家們的對手往往是隨即匹配的,而他們的角色可以在游戲中選擇聊天對話,增加游戲的獨特性。如果對話系統和已有的功能使用同一個隨機器的話,一名老練的玩家或許就可以預測下一個對話框是什么內容。


透明的分配機制:對于很多玩法中的隨機化使用來說,數字應該使用統一的分配機制,也就是說,所有人生成一個特定數字的可能性應該是相同的。而對其他用途的游戲來說,這些隨機數字應該遵循特定的分配機制,比如說很多游戲都加入了正常的分配機制,隨機的樣本經常會產生與平均值相近的數字。GameplayKit包含多個隨機化的class,足以滿足開發者們的這些目標。


如何在你的游戲中使用隨機化功能


GameplayKit中所有的隨機化class都是按照GKRandom協議,可以用最少的界面生成隨機數字,首先你需要選擇一個適合自己游戲任務的隨機生成器:


在大多數情況下,你需要一些按照特定范圍固定分配的隨機數字對于這類任務來說,使用GKRandomDistribution就可以了。如果要定制化隨機行為同時保持統一分配,你可以選擇不同的GKRandomSource子類為GKRandomDistribution對象提供基本的隨機數值。


為定制化隨機數字的分配,請使用GK GaussianDistribution或者GKShuffledDistribution class。


如果你不需要特定范圍或者分配隨機數字,可以直接使用GKRandomSource subclasses。


你還可以直接使用GKRandomSource classes的一種來為一組數列進行隨機排序,比如為紙牌洗牌。首先,選擇你需要的隨機源對象,然后把數列放到隨機源當中。這種方法可以返回原數列的數字,不過是亂序排列。


實體和組件(Entities and Components)


和任何的軟件一樣,設計一款復雜的游戲需要規劃一個很好的架構。隨著你的游戲變得越來越大、內容越來越豐富,最初做樣本游戲Demo時的一些決定可能會成為游戲發展路上的障礙。GameplayKit可以提供一個讓你從一開始就可以重復利用的架構,把游戲中不同的方面分隔開來。


在這種架構里,一個實體指的是游戲相關對象的類型總稱。實體可以代表對玩法非常重要的對象,比如玩家以及敵人角色;也可以是只存在于游戲中很少和玩家進行互動的對象,比如某個關卡里的動畫裝飾。實體還可以是創意或者游戲的UI元素,比如決定何處放置地方角色的系統或者管理玩家角色裝備的系統等等。


一個實體只有容納了游戲組件之后才開始起作用,一個組件指的是處理特定而有限方面外觀或者行為的對象。由于一個組件的功能范圍是有限的,而且不隸屬于特定實體,所以你可以在多個實體中重復使用同一個組件。


狀態機(State Machines)


幾乎在所有的游戲中,玩法相關的邏輯都高度依賴于目前游戲的狀態。比如動畫代碼的改變可能取決于一個玩家的角色目前在行走、跳躍還是站立。敵人的移動代碼可能取決于你為其所做的模擬決定,比如是否追逐較弱的玩家或者躲開強大的玩家等等。甚至你的游戲在特定時間運行的幀率代碼更新也取決于游戲是在進行、暫停還是在菜單或者過場動畫界面。


當你開始研發一款游戲的時候,很容易把所有取決于游戲狀態的代碼放到同一個地方。不過,隨著你的游戲變得越來越復雜,單一的方法已經很難支撐進一步的擴展。


狀態機可以幫助你定義不同游戲狀態下的規則,這些定義被稱為狀態機。然后,你就可以把相關的狀態和任意代碼聯系起來,可以在不同游戲狀態下切換模式,使用狀態機管理代碼可以讓你更容易給游戲中的復雜行為進行理性面對,狀態機可以用于你游戲中的任何一部分。


Minmax Strategist功能


很多游戲在視頻游戲(Video Gaming)出現之前就已經非常流行了,尤其是桌游,比如十五子棋、國際象棋、石頭剪刀布以及Go等等,從邏輯意義上講都是游戲。玩家們想要在這些游戲中獲勝就需要在每次機會中規劃好最佳的行動,考慮到對手的步驟。這類游戲玩起來很帶感,不管對手是另外一個人還是電腦玩家。


在GameplayKit中,Strategist就是AI的簡單形式,你可以為這類游戲創造電腦對手。使用Minmax策略的游戲使用的GKMinmax class和支持API應該具有以下特點:


順序性:每個玩家都需要按順序行動,也就是說,玩家們要輪流體驗。


對抗性:一個玩家贏,就必須有其他玩家(們)輸,這類游戲的設計理念是,一個玩家的每一步都應該讓自己離勝利越來越近,或者讓其他玩家們離失敗越來越近。


可知性:玩家們可以自信的猜測自己的每一步可以帶來什么樣的后果,也就是說,玩家們的行動是不取決于機會和概率的。


完美的信息:所有對于游戲結果重要的信息必須始終對所有玩家開放。比如,國際象棋的輸贏基于雙方在棋盤上的位置,不過大多數玩家在大多數情況下都可以看到這些位置。如果有人在過程中藏了棋子的話,那么就不是完美的信息了,因為一個玩家的行動出現了未知因素。


尋路系統(Pathfinding)


在很多游戲中,導航都是非常重要的概念,一些回合制游戲要求玩家們選擇通往目標的路徑,很多動作和冒險游戲把角色放到一些迷宮當中,玩家們必須揭開謎題才能實現玩法目標,敵方角色必須按照既定方式給玩家帶來挑戰。決定如何設置游戲迷宮、或者其他導航方面的過程就是尋路。GameplayKit為你的游戲提供一系列的地圖以及尋路工具,你可以用來移動角色或者其他的游戲組件。


使用GameplayKit尋路工具需要把游戲中的導航區域描述為一張圖表,上面有不同的位置或者節點一個組件從一個位置到另一個位置的移動路徑是不同的。由于大多數的2D游戲都比較適合,所以為這些游戲做尋路系統是非常容易的。


代理、目標和行為(Agents, Goals, and Behaviors)


在很多種游戲中,游戲組件的實時移動都具有一定程度的自動化。比如玩家可以在一個游戲中拖動角色去特定區域,然后角色會自動行走并達到該地點。敵方角色可能會在圖中攻擊,計劃打斷玩家的行動。同盟玩家可以通過消息告訴玩家,保持平行的距離。在所有的情況下,每一個組件的移動都可能具有現實制,所以游戲角色依然可以實時移動和變換方向


GameplayKit中的代理系統可以提供有效的自動移動方式,一個代理意味著游戲中的組件會按照時機的特點進行2D空間移動,比如尺寸、位置以及速率,當然也包括速率改變時候的阻力。一個組件的移動取決于其行動目標。


目標就是可以長期影響代理移動行為的目標。


行為和帶動一個游戲組件移動的一個或者多個目標有關,比如,一個目標可能包含直接移動到一個點,路上避免所有障礙。當你把行為中的多個目標綜合起來之后,就可以為每一個帶來相關影響的目標分配權重。


規則系統(Rule Systems)


一些游戲包含非常復雜的規則,比如回合制RPG戰斗游戲可能會規定對方角色抵達相同區域之后的反應,比如誰先手?是否可以相互攻擊?如果角色試圖攻擊或者與另一個角色互動的時候會發生什么等規則。

有些最有趣的游戲包括突發的行為,簡單個體之間的互動可以為整個系統帶來樂趣。


在GameplayKit當中,規則系統解決了這些問題。通過游戲邏輯數據的對比,規則系統可以幫助你把游戲分解為功能性、可重復使用性、以及可擴展組件,簡單的規則也可以到來復雜的行為。


GameplayKit包含兩個主要的規則系統打造class,分別是代表永恒狀態下的特定決定規則GKRule,以及決定一些特定方面狀態數據的規則GKRuleSystem。




GameLook 2015-08-23 08:54:49

[新一篇] 軟件工程師的創業陷阱:接私活 人生

[舊一篇] 千年難遇!全球20個最奇特的自然現象,真的有綠光!
回頂部
寫評論


評論集


暫無評論。

稱謂:

内容:

驗證:


返回列表