我們經常說的遊戲引擎是什麼?

雷冖

所謂遊戲引擎,簡單地來說,就是一組專門用於遊戲編程的API(Application Programming Interface,應用程序編程接口,不懂編程的可以簡單粗暴地理解為一組函數)的集合。使用遊戲引擎,能夠簡化我們的遊戲編程工作。

為了便於大家理解,我舉個比較容易明白的編程方面的類似例子。比如說,在我們實際的編程中,會經常根據需要編寫大量的函數,每一個函數能夠完成一定的功能。簡而言之,每個函數就是一個功能載體。例如,要實現查找功能,就編寫一個 bool find(string ObjName) 函數,該函數帶一個參數,即要搜索的對象名,並返回一個 bool(邏輯真假)值。如果該對象沒有找到,就返回假(false),否則返回真(true)。這樣,如果我們在編寫程序的過程中,想確定一下某個對象到底存不存在時,只要調用這個函數即可,從而大大簡化了工作量。

同樣的道理,遊戲引擎也是做的類似的工作。在遊戲編程中,由於考慮到性能等等多方面的問題,很多時候需要直接訪問硬件底層,如果不使用遊戲引擎,帶來的工作量是相當之大的,難度也是非常之高,有些時候甚至是不可能完成。不過,有了遊戲引擎,工作量就大大減輕了,因為遊戲引擎本質上就是一組可供我們調用的函數集合,它已經為我們封裝了那些底層的代碼。我們無需關心這些功能具體是如何實現的,只需要根據我們的要求調用相關函數即可。

還是用上面那個搜索函數的例子來類比,你要想實現查找,就調用 find 函數。至於 find 函數是怎麼實現查找 ObjName 對象的,用的是什麼算法,在搜索過程中需分配多少內存,查找如何根據一個字符串去匹配一個對象或者遇到錯誤又如何處理,等等,我們無需去關心。同樣的,有了遊戲引擎,比如說我們要想在屏幕上渲染一個 3D 圖形,只需要調用該引擎提供的 3D 渲染函數即可,至於這些 3D 渲染函數內部究竟如何實現,在不同系統上又是如何做到迅速高效地在屏幕上繪製出精美一致的圖形,我們無需去關心。


蒙面侍衛

啥是遊戲引擎?前幾個回答都對,基本上就是人家做好的現成的程序模塊,你開發遊戲時可以拿來主義拿來就用。

若要具體點,能稱為遊戲引擎,還需要滿足下面幾個特點:

(1)相對完整性(框架性)。不是隨便有了幾個模塊,就能夠稱為遊戲引擎的,這些模塊必須能夠滿足開發某種遊戲的主要需求,或者說,用這些模塊必須能夠搭起某一類遊戲的基本框架。

(2)磚瓦性。遊戲引擎的模塊要具有一定的基礎性,就像磚瓦,人家用你的引擎能搭起不同造型的牆,而不是提供牆和屋頂,那對開發者的限制就太大了,靈活性不夠。

在此基礎上,當然還要滿足諸如性能、流暢度、易學易用度等要求,但這些不屬於質的要求,即哪怕性能等再差,只要你做的東西滿足了上述兩個特點,就可以稱為遊戲引擎,只不過人家用不用就是另外一回事了。

基於前述,若你開發了一款大而受歡迎的遊戲,你就可以將相關模塊提取重構做成引擎。之所以強調大,因為大了你的模塊才具有相對完整性;之所以強調受歡迎,因為成功了才有做成引擎的信心和價值,畢竟從無到有專門做引擎的代價是很高的,這也是市面上遊戲很多但高性能受歡迎的引擎不多的原因。


觀讀研


一步罪化一步蓮華

我的理解是遊戲引擎是實現在遊戲裡各種效果的程序,比如炸彈爆炸會有煙霧效果,程序員只需編寫炸彈爆炸的程序,而煙霧怎麼飄散則需要調用遊戲引擎來渲染,還有人在有光的地方行走是要有影子的,假如你正前方有一盞高於你身高的燈,你向它走去,那麼你的影子規律就是“影子在你身後,離燈源越近影子越短”,然後你右轉直行,燈源就到了左後側,影子就在右前方。而沒有遊戲引擎或引擎效果不好,人物的影子就是固定在身後的,甚至沒有影子。另外遊戲引擎還有給物體著色、水面效果等等,總之,遊戲引擎越好,實現的物理效果就越好,遊戲就越接近真實


北風157744457


分享到:


相關文章: