回覆列表
  • 1 # 擦乾好地方

    現在的遊戲使用的硬體介面基本有兩種,一個是DirectX,另一個是OpenGL , OpenGL只是2D 3D圖形影象介面,沒有其它功能,DirectX則是一個全套的多媒體介面,包括2D 3D影象、影片、音訊、網路、輸入裝置等等,專為遊戲製作開發。兩個發展都很迅速,不斷新增新的功能,並由硬體實現。 遊戲引擎的任務就是封裝這些底層硬體加速介面的細節,並給遊戲設計人員提供完善的實現遊戲所需功能的介面。 想要寫一個引擎,首先得知道引擎是什麼樣,可以參考釋出的引擎,有簡單的非商業的,也有功能強大複雜的商業的。推薦你看看出名的2D引擎 HGE ,速度非常快,簡單易用,引擎中包含原始碼。 參見其網站:hge.relishgames.com 如何使用引擎,下載引擎包,裡面的參考文件會教你如何使用。參見業內著名的遊戲開發網站 www.devmaster.net裡面有各類遊戲引擎的詳細資訊。

  • 2 # 歪筆獨遊

    嗯嗯,遊戲引擎發展到今天,已經是一個產業化需求比較泛化的軟體體系。如果細分,按不同的細分維度會有很多不同的劃分,比如按功能分可以分為物理引擎,渲染引擎,指令碼引擎等,按平臺分可以分為PC遊戲引擎,HTML5遊戲引擎,移動端遊戲引擎等,按渲染類別分2D引擎,3D引擎等。

    再比如對於網遊,又分客戶端引擎和伺服器引擎;伺服器引擎的架構遊戲型別、負載需求息息相關,架構本身和技術基礎元件選型(作業系統、開發語言、網路庫、資料庫、運維工具、運營後臺等)相關聯,比較靈活。

    按問題要求,猜測樓主問的是通用跨平臺客戶端引擎,參考物件是Unity,Unreal,CocosCreator等。先提取遊戲引擎典型的核心功能如下:

    渲染:實現畫面的展示

    物理:實現物理世界的抽象和表現

    音訊:實現聲音的播放處理

    網路:實現聯網功能

    遊戲程式設計介面:講遊戲引擎能夠提供的介面以API形式暴露給開發者

    配套的整合開發環境(IDE):實現視覺化場景編輯、組織,視覺化物理編輯,視覺化UI佈局,資源的使用等

    除錯功能:提供便捷的方式以便開發者對遊戲功能進行測試和debug,最佳化效能。

    打包釋出功能:生成最終的遊戲的exe,app,apk等等可執行(可執行)檔案

    外掛擴充套件功能:提供給高階開發者的對引擎自身功能增強的功能介面

    其它功能:如Unity有service,可以整合平臺數據統計、自身的影片廣告等功能。

    然後逐一略敘實現方式,強調一下,最好參照業內的經過廣泛驗證的引擎去了解,例如Unity;如果想知道更多細節,可以先使用一下主流引擎。

    1.渲染:為了跨平臺,一般會選用跨平臺的圖形標準庫底層如OpenGL,基於底層庫再構建上層渲染框架,如精靈(Sprite),GUI,3D模型的渲染,shader擴充套件等。

    2.物理:物理引擎對運算效能要求比較高,而且底層功能的測試需要耗費大量精力,所以通常採用成熟的物理引擎,例如Havok,PhysX, Bullet, cannon.js等。

    3.音訊:通常會採用業內成熟方案,如開源的OpenAL、FMOD、HTML5平臺自身的Audio功能等。一般來說,非音樂類遊戲對音訊功能的需求相對不會太複雜,主要是靠專業軟體提供音效檔案(mp3,wma等),遊戲中解析因小檔案,處理聲音播放,音量大小調整等。

    4.網路:提供聯網的功能,按需提供TCP,UDP,HTTP等協議的包裝好的易用的介面。如果為了方便開發,可以處理好客戶端和伺服器通訊的連線處理,錯誤提示,協議的幀格式,序列化、反序列化方式,可以在此之上提供進一步的規範,例如採用Protobuf作為協議格式。

    5.遊戲程式設計介面:這就是提供給開發者的API的組織。確定引擎提供給開發者用什麼語言程式設計,怎麼使用圖片、音影片資源、3D模型等,怎麼提供介面和遊戲執行時環境(電腦、手機)互動等。

    6.配套的整合開發環境(IDE):易用的視覺化開發工具,如拖拽佈局、拖拽遊戲資源的使用、程式碼編輯、整合除錯打包功能等。這一塊是遊戲引擎開發工作量的大頭,涉及使用者(遊戲開發者)密集使用的互動介面,要儘可能滿足高效、易用。一般來說如果不是特別有能力駕馭,最好現成的採用跨平臺的應用程式開發方案,比如Cocos Creator採用electron框架。

    7.除錯功能:提供檢視FPS,跟蹤程式碼執行,Profile,網路訊號模擬,解析度模擬設定,硬體裝置模擬(手機)預覽遊戲等。建議遊戲執行時與編輯器使用同一套或者大致一樣的渲染和資源介面(例如Unity),這樣方便降低除錯和執行結果大相徑庭的情況。

    8.打包釋出功能:簡單處理可以生成要打包的對應平臺的工程,比如android平臺生成Android Studio工程,ios平臺生成xcode工程,注意資源、程式碼庫的引用關係,配置檔案的有效性、一致性,編譯速度等。

    9.外掛擴充套件功能:人力因時而窮,引擎功能不必強求一開始就大而全,可以將引擎整體設計為一個易擴充套件、易修改的結構,提供相應介面暴露給開發者,群策群力迭代和改進遊戲引擎。

    10.其它功能:這一塊可以根據自身引擎特點來進行新增,比如現在主流的幾大引擎都有提供官方繼承的資源商店、資料統計等服務介面。

    真正可用的引擎的實現是一個系統而複雜的工程,有很多髒活累活需要考慮在裡頭,平臺相容性、效能、效果、易用性、魯棒性、文件編寫……需要耗費巨量的心力;

    如果是想做個娛樂引擎可以隨意玩,技術如詩,越擼越痴;

    如果是想創造一個偉大的引擎,請收下我的膝蓋。

  • 中秋節和大豐收的關聯?
  • 人生一定要過得精彩嗎?對此你怎麼看?