以前常常再說「
遊戲引擎」、「遊戲引擎」、「開發遊戲引擎」等等,到底什麼叫做遊戲引擎,其實我以前對於遊戲引擎也不是很懂,書上說明的也讓人看得霧煞煞。你拿現實生活中的車子比喻也是可以比較好理解,但是把他換作遊戲,好像又不怎麼相似。怎麼說?比如說遊戲引擎可以處理遊戲內的所有事情,包括劇情、角色、場景、音樂、動畫、特效等……,當然不止這些,這邊稍微簡單舉例。那問題來了,遊戲引擎是怎麼運作的?怎麼與其他相關的東西產生連動的呢?
拿檔車的引擎來說,檔車的引擎透過點燃油氣爆炸產生的推力使得活塞作動,而活塞再去帶動區軸,區軸帶動變速箱的齒輪,齒輪再透過鍊條傳動至輪子輸出動力,如此繁雜。那你把它換到遊戲引擎上,也是同樣的道理,只是怎樣子會比較好理解呢?以前我真的不懂,百思不得其解何謂遊戲引擎,拿RPG Maker來說,我以前一直以為編輯器就是引擎,但事實上編輯器卻不是引擎啊!我就不懂了,直到後來我開始寫程式,才稍微比較理解。
首先,先來個簡單的關係圖,之後再來做詳細的解說。
眾多管理者的集合 → 遊戲引擎 ← 編輯器
↑ ↓
└------------------┘
透過視覺化的操作,簡易化許多需要重複的程式片段,將指令集輸入到管理者中的程式碼。能夠更方便更快速更直覺的組裝出需要的功能,節省大量的時間,也能夠讓其他人不懂程式碼的人能輕易完成數值等的設定更改。
所謂的遊戲引擎,它是一個概稱,將所有相關的東西放在裡面形成一個有組織性、相當嚴謹的系統架構,而這個系統框架的概括統稱,就是「遊戲引擎」,這就是所謂的「遊戲引擎」的真相。
如果從開發遊戲引擎的層面來說明,會更好理解。今天假設你要做一款文字冒險遊戲(AVG),而自製引擎的話,所謂的開發引擎,其實就是開發出各種遊戲內容物的「管理者」。舉AVG的例子是因為AVG的遊戲引擎,相較於其他類型遊戲,如RPG等是較為簡單容易開發的。
何謂管理者(Manager)呢?在討論開發引擎之前,首先你要知道你所要做的東西裡面有什麼東西、需要些什麼。以AVG為例,有幾個重點部分,如:劇情、事件、場景、音樂、音效、人物、介面、畫面、圖片等諸多元素,你就要先為這各個元素分別製作他們的功能,如劇情系統、事件系統等,而這些系統再透過各自的管理者管理。管理者下面有各個類別→方法→程式碼等,這些類別、方法、程式碼就是剛剛提到的系統功能的原型,而相同的數個資料則是透過「鏈結串列」產生關聯性,因為在程式當中,資料並不會如你所想的都放在同一個地方。
所以第一步是先設計需要用到的功能,比如劇情系統,再設計管理者方便管理及操作它們。第二步就是將這些管理者組織起來,產生連動,這些龐大的、有系統的、嚴謹的管理者組織架構,就是所謂的「遊戲引擎」了。
做出了遊戲引擎之後,只要你的程式沒出問題,遊戲就能運行了,因為遊戲的運行是建立在遊戲引擎的運作下。那麼接著我們就要來談談編輯器了。何謂編輯器?所謂的編輯器就是一種圖形化使用者介面的軟體工具。當今天你的遊戲引擎完成之後,你可以透過程式碼來增減遊戲內容、改變遊戲的數值等,這正是所謂的「底層製作」,直接利用編寫程式碼等來完成遊戲內容的修改。問題來了,當你今天不小心改錯了數值;或是你根本不是個程式設計師;又或著你有大量的資料需要處理。當你在使用底層製作的方式時,不但很容易出錯產生BUG;甚至會造成開發效率低下,導致時間成本的浪費。一款遊戲,通常不會只由一個人完成,會是一個由多個部門所組成的團隊。那好比說企劃人員要將數值輸入,可是他完全不懂程式,這時候該怎麼辦?答案就是「編輯器」。因為團隊中不可能所有人都看得懂程式碼;都明白如何更改遊戲數值,所以你就要開發一個編輯器方便自己或他人操作,達到能夠更方便更快速更輕鬆的改動程式碼的效果。
當然如果你是一個人自己單獨開發自己的東西,那你也可以不做出編輯器,因為沒有編輯器,一樣可以做遊戲,遊戲內容一樣可以直接透過程式碼去更改,只是那樣會造成效率低下,而且不容易除錯。最好的做法當然還是開發一個編輯器,會比較方便。
差不多要來收尾了。所以綜上所敘,遊戲內包含了遊戲引擎,所以遊戲才能運行,因為遊戲是透過遊戲引擎在驅動的。而所謂的遊戲引擎,就是由眾多系統功能的管理者的集合於一個框架上所組成的一個大系統。編輯器則是額外的,你可以開發它,也可以選擇不開發,因為它不屬於遊戲引擎的一部份,沒有它遊戲一樣能作動。不過從長遠來看,編輯器的開發也是非常重要的,能夠提升效率、便利性等,也能夠讓其他沒有程式基礎的人,能夠輕鬆上手,輕易地使用工具來達到數值輸入、參數更改、內容改動等。而且日後若有相同類型的遊戲要製作,你也不用再從頭開始寫程式碼寫管理者,能夠直接將這些工具搬來用。
Editors→Engine←Framework←Managers←APIs←functions
依序是:編輯器→引擎←框架←管理者←函數庫←方法
以上,今天的遊戲引擎簡介就到這邊,因為是簡單介紹,所以如果有錯誤,還望各位多多包涵,歡迎留言指正。感謝你的收看,我是車一平八,我們下次見。