iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 9
5

遊戲開發技術介紹

在開發遊戲時,遊戲畫面、特效、音效的呈現是吸引玩家很重要的關鍵,也是讓玩家能夠更加放鬆的享受遊戲內容的必備要素,例如現在強調的虛擬實境等,也都是為了此目的而存在。

因此在開發遊戲程式時,會較一般網頁或應用程式的開發上,花更多的時間與心力在畫面的串接以及動畫邏輯撰寫,讓遊戲畫面能夠與玩家有更多的互動。

如畫面元素的物理性、玩家投擲物體時飛落的路徑、物件間碰撞的偵測與觸發的事件、遊戲角色特定的動作該配合出現的特效、攻擊時的特效粒子系統、特殊效果的畫面濾鏡等等…。

上述的每一個項目都有相關的技術要去學習,可幫助我們更快上手。
如:憤怒鳥所使用的物理引擎為Box2D,物理引擎可以賦與物體物理特性,具有掉落、碰撞等特性;
如:Spine、DragonBones等骨骼動畫套件,壓縮2D遊戲所需要的素材大小。
像這隻龍走動的動畫

可以用這張圖搭配骨骼動畫引擎來組合成上圖的動畫

如:particles.js粒子系統可以讓美術可以使用特效產生器產生特效的設定檔案,並能夠於遊戲中執行。

另外在遊戲開發上,對數學、物理、色彩矩陣等的了解度也是十分重要。

例如Shader是一個能夠透過一連串的數學公式,去針對一個圖片來做出特殊的動畫效果,如水波效果、風吹效果、霧霾、煙霧效果等…。

有了上面這些技術的幫助,我們可以不用每一個特效都要製作連續圖檔,降低美術的負擔,也能讓特效有更多的變化性、更小的遊戲檔案大小。

在學習那些技術之前,我們首先先來認識最基礎的Graphics Library。

Graphics Library

現在的Graphics Library主要的作用,是幫助我們能夠使用GPU來做電腦圖像處理。GPU,圖形顯示器,又稱顯示核心、視覺處理器、顯示晶片或繪圖晶片,是一種專門在個人電腦、工作站、遊戲機和一些行動裝置(如平板電腦、智慧型手機等)上執行繪圖運算工作的微處理器。

在GPU尚未出現前,圖形的繪製是和一般的複雜運算一起使用CPU去做運算,因為影像輸出的處理會需要大量的運算,會讓電腦的運算速度被拖慢。直到1999年8月輝達公司(NVIDIA)在發表GeForce 256繪圖處理晶片時,提出了將影像輸出的顯示晶片,視為獨立的運算單元的概念。
GPU不同於傳統的CPU,傳統CPU內核數量較少專為通用計算而設計。相反,GPU是一種特殊類型的處理器,具有數百或數千個內核,經過最佳化,可並列執行大量計算。雖然GPU在遊戲中以3D彩現而聞名,但它們對執行分析、深度學習和機器學習演算法尤其有用,近年來十分流行的AI人工智慧,由於在大數據處理時需做許多的矩陣計算,也用到GPU其特殊運算的功能。GPU可讓某些計算比傳統CPU上執行相同的計算速度快10倍至100倍。
起初,高效能3D圖像只可經設有3D加速功能(和完全缺乏2D GUI加速功能)的獨立繪圖處理卡上運算,如3dfx的Voodoo。然而,由於製造技術再次進步,影像、2D GUI加速和3D功能都整合到一塊晶片上,現在許多2D的遊戲引擎也都能夠享受GPU所帶來的效益。
有了3D圖形庫,撰寫可以擅用GPU的一個遊戲引擎不再困難重重。以前還沒有統一的API規範時,開發3D遊戲必需要先有配合的GPU硬體廠商,並且針對該硬體去撰寫相關的驅動程式,來使用GPU的運算功能,這會讓開發3D的遊戲困難重重。3D圖形庫最有名的有Direct3D和OpenGL。雖然DirectX在家用市場全面領先,但在專業高端繪圖領域,OpenGL是不能被取代的主角。

OpenGL


OpenGL是個與硬體無關的軟體介面,可以在不同的平台如Windows 95、Windows NT、Unix、Linux、MacOS、OS╱2之間進行移植。這些API規範描述了繪製2D和3D圖形的抽象API。這些API雖然可以完全透過軟體去撰寫,但它是為大部分或者全部使用GPU硬體加速而設計的。OpenGL規範由1992年成立的OpenGL架構評審委員會(ARB)維護。OpenGL不僅語言無關,而且平台無關,在各種平台及設備都有支援OpenGL的介面,移植性較佳。

近年來由於WebGL的推出,讓網頁的3D效果也能夠享受到GPU加速效果,使得3D的遊戲得以在網頁上被實現。Three.js就是一個基於OpenGL使用javascript做開發的3D引擎。

OpenGL是一個不斷進化的API。新版OpenGL規範會定期由Khronos Group發布,通過擴展API來支援各種新功能。

Direct3D


Direct3D是DirectX下的一個子項目。提供設計人員一個共同的硬件驅動標準,讓遊戲開發者不必為每一品牌的硬件來寫不同的驅動程序,也降低用戶安裝及設置硬件的複雜度。

舉個例子,以前在DOS下玩遊戲時,不像現在安裝就可以玩了,過去往往要先設置聲卡的品牌和型號、然後還要設置IRQ(中斷)、I/O(輸入於輸出)、DMA(存取模式),如果哪項設置的不對,那麼遊戲聲音就發不出來。這部分的設置不僅讓玩家傷透腦筋,而且對遊戲開發者來說就更頭痛了。因為為了讓遊戲能夠在眾多電腦中正確運行,開發者必須在開始製作遊戲前,便把市面上所有音效卡的硬體數據都收集過來,然後根據不同的API來寫不同的驅動程式,這對於遊戲製作公司來說,是很難完成的,所以說在當時多媒體遊戲很少。

微軟看到了這個問題,為眾廠家推出了一個共同的應用程序接口——DirectX,只要這個遊戲是依照Directx來開發的,不管你是什麼顯卡、聲卡、統統都能玩,而且還能發揮更佳的效果。當然,前提是你的顯卡、聲卡的驅動程序也必須支持DirectX才行。

以現況來說,OpenGL因為具有OpenGL多平台支援的特色,同一套程式可以直接被套用在各種不同的平台,因此在專業高端繪圖領域,OpenGL是不能被取代的主角,在包含CAD,內容創作,能源,娛樂,遊戲開發,及虛擬實境等行業領域中,OpenGL得到廣泛的應用。DirectX適合於多媒體,娛樂,及時3D動畫等廣泛和實用的3D圖形計算,在基於windows平台上的遊戲開發中,它占領了大部分的市場。

遊戲平台介紹

網頁遊戲

網頁遊戲(簡稱頁遊),又稱Web遊戲,是一種基於網頁的電子遊戲,一般不用下載用戶端,任何一台能上網的電腦就可以進行遊戲。與其他大型遊戲比較,具有占用空間小、硬體要求低等特點。
在過去Flash是網頁遊戲最火紅的工具,曾經有一段時間flash遊戲在Facebook上非常受歡迎,如Candy Crush等,都同時有手機遊戲與Facebook版本的遊戲。

智慧型手機遊戲

由於大多數早期手機的效能所限,手機遊戲普遍比較簡單,畫面也比較粗糙,更不要說操作性了(事實上,很少有手機的鍵盤適合玩遊戲的);因此,益智類遊戲(如俄羅斯方塊、貪食蛇、推箱子等)是常見的遊戲類型。目前由於手機以及類手機的PDA裝置發展,手機處理資訊的能力增強,漸漸出現了更大畫面、更加複雜的手機遊戲。現在有更多的公司也推出多人線上手機遊戲。

電腦應用遊戲

大多數的經典遊戲都是電腦應用軟體,如英雄聯盟、魔獸世界、天堂、世紀帝國等等。由於電腦取得容易、又具備語音、易於打字等功能,在線上與網友在互動上更為方便,較大型的多人線上遊戲還是以電腦應用為主。近年來更興起了遊戲直播的風潮,一般實況主常透過直播平台網站轉播遊戲過程、生活瑣事與商業活動,並與觀眾即時性地互動,吸引許多的忠實觀眾。

家用遊戲機

如Wii U、PlayStation 4、Xbox One。電視遊戲,指的是使用電視作為顯示器來遊玩的電子遊戲類型。遊戲由傳輸到「電視」或「類似之音像裝置」的畫面影像(通常包含聲音)構成。遊戲本身通常可以利用連接至遊戲機的掌上型裝置來操控,這種裝置一般被稱作「控制器」或「搖桿」。控制器通常會包含數個「按鈕」和「方向控制裝置」(例如:類比操縱桿),每一個按鈕和操縱桿都會被賦予特定的功能,藉由按下或轉動這些按鈕和操縱桿,操作者可以控制螢幕上的影像。而螢幕、喇叭、和搖桿都可以被整合在一個小型的物件中,被稱作「掌上型電玩」或簡稱「掌機」(Handheld game console)。

遊戲平台

Steam為其中最大的遊戲平台,是美國電子遊戲商維爾福(Valve)於2003年9月12日推出的數位發行平台,提供數位版權管理、多人遊戲、串流媒體和社群網路服務等功能。藉助Steam,用戶能安裝並自動更新遊戲,也可以使用包括好友列表和組在內的社群功能,還能使用雲端儲存、遊戲內語音和聊天功能。Steam軟體免費提供了一個應用程式介面,稱為Steamworks,開發商可以用來整合Steam的功能到自己的產品中,例如網路、線上對戰、成就、微交易,並通過Steam創意工坊分享用戶創作的內容。

遊戲引擎介紹

Unity

Unity是現行最普遍用來開發遊戲的遊戲引擎,可用於開發 Windows、MacOS 及 Linux 平台的單機遊戲,PlayStation、XBox、Wii、3DS 和 任天堂Switch 等遊戲主機平台的電動遊戲,或是 iOS、Android 等行動裝置的遊戲。Unity 所支援的遊戲平台還延伸到了基於 WebGL 技術的 HTML5 網頁。再加上Unity有unity asset store,對於獨立開發者而言,更是一個最好的選擇。Unity遊戲引擎裡本身就含有碰撞偵測、物理引擎、角色模式、玩家視角、光源設定等功能,並且有很完整的IDE介面,並且可支援如Spine等骨骼動畫,對於開發者而言,可以更簡易的製做出一款能吸引人的遊戲。爐石戰記、仙劍6、神魔之塔都是用Unity開發的有名的手機遊戲。

Cocos2d

Cocos2d 是一個開源的2D遊戲框架,在各種不同的程式語言都有不同的實作。一開始在iOS裡支援度最高的遊戲引擎就是Cocos2d,因此有許多iOS的小遊戲都是使用Cocos2D開發的。後來也有了Java版本,可運行於Android平台。Cocos2d-X是基於Cocos2d for iPhone並使用C++語言實現的多平台版本,後來也有了JavaScript版本的Cocos2D。因此現在的cocos2D也可以支援許多不同的平台,但由於其IDE介面不像Unity般強大,所以普及性還是不如Unity。

Flash AIR

雖然現在在網頁應用上,Flash已經幾乎完全被淘汰掉了,但是因為我寫了10幾年的flash一定要介紹一下在手機遊戲上,仍是有許多以Flash AIR所開發的遊戲。相關遊戲作品請見:作品牆

HTML CANVAS

由於WebGL的推出,現在在網頁上開發遊戲,也可以有很不錯的畫面及效能,因此有越來越多的小遊戲都是以H5來製作。網頁遊戲本身具有許多好處,它不需安裝、馬上可以進行遊戲、很容易可以與其他網頁做結合與搭配。對於一些網頁活動行銷專案裡的小遊戲、廣告案、或者去年柯p的政見小遊戲『奔跑吧!台北』,由於其遊戲目標是吸引更多人在遊戲中去了解商品、柯p,更需要能夠完整的與相關網站做連結,這時候H5就是最好的選擇了!
使用H5 Canvas去開發遊戲的缺點是,即使有的webGL的幫助,Javascript效能還是沒辦法與手機原生native code的速度相比,因此較不容易開發全3D又很複雜的遊戲。

連連看技術選擇

由於連連看也是屬於一個很簡單的小遊戲,本身較不會有太大的效能問題,現在網頁遊戲要包成APP也是有許多方法,並且以網頁的特性做開發可以更方便的將遊戲嵌入在不同的平台上。也是我現在最熟悉的技術。所以在這邊我選擇了使用PixiJS+TypeScript來開發連連看遊戲。

參考資料


上一篇
[8 - 遊戲介紹] 遊戲歷史簡介
下一篇
[10- 遊戲製作] PixiJS介紹
系列文
遊戲之美 - 連連看經典遊戲開發31

尚未有邦友留言

立即登入留言