譯 Godot設計哲學

2022-02-06 12:23:57 字數 2430 閱讀 9749

每款遊戲引擎都有不同定位、滿足不同的需求。這不僅因為它們所提供的功能不同,更在於每款引擎獨特的設計。這些引擎背後各自的設計哲學,會給遊戲帶來不同的開發流程和開發方式。

godot信奉物件導向設計,並以之為核心,構建出了靈活的場景系統和節點層級機制。它嘗試為你的遊戲專案提供一種直觀的結構組織方式,這種方式甚至背離了嚴格的程式設計模式。(譯註:有點visual basic的感覺)

舉個例子,godot支援場景的合成或叫聚合。就像巢狀式的prefab:建立乙個「訊號燈」場景檔案,以及乙個引用了這個「訊號光燈」的「破燈塔」場景檔案;然後,建立乙個由「破燈塔」填充的「城市」場景檔案。如果修改了「訊號燈」的顏色,儲存這個「訊號燈」場景檔案,「城市」中的所有「破燈塔」效果也會實時更新。

godot中的場景可以是遊戲所需的任意資源:**、角色、道具、門、關卡、關卡的部分等等...像純**方式中的「類」的概念,但在godot中不僅可以通過純**方式進行設計,也可以自由的通過godot編輯器進行設計,並且還可以混用。

除此之外,可以繼承任意的場景資源。與其它3d引擎中的prefab不同,在godot中場景可以被繼承和擴充套件(譯註:參考物件導向程式設計中的類繼承概念)。比如,可以通過繼承「角色」來建立乙個「魔法師」。在編輯器中修改「角色」也會更新「魔法師」。這種機制有助於根據遊戲的設定來定義合理的結構。

godot提供了很多不同型別的物件-節點(node),每個節點都有特定用途。節點是「樹」上的一部分,且他們的父類都可以追溯到「node」類。引擎中的碰撞檢測圖形元件則只是特例。

sprite 的繼承關係依次是 node2d、 canvasitem 及 node,並擁有所有父類的屬性和方法,如 變形 或 繪製自定義形狀及用自定義著色器渲染。

godot 盡量內建多數常規需求的工具。比如現在有了專門的指令碼工作區、動畫編輯器、地圖編輯器、著色器編輯器、偵錯程式、效能分析器、本機熱重啟及遠端裝置熱重啟特性等。

godot的目標是提供用於建立遊戲的完整工具包和連貫的使用者體驗。同時,也可以與外部程式通過已有匯入外掛程式進行協作,或者自己建立相應匯入外掛程式。

這也是godot提供自己的程式語言gdscript及visualscript、以及支援c#語言的部分原因。這些語言被緊密整合在godot引擎和編輯器中,用於滿足遊戲開發者和設計者的需求。

通過 gdscript 可以編寫類似 python 語法的簡潔**,它支援型別檢測,並能達到類似靜態型別語言的**自動完成效果。同時,它也會通過內建的vector和color等資料型別優化遊戲場景的**。

通過 gdnative 環境,則可以用c、c++、rust、cpython等編譯型語言編寫高效能**,而且不需要重新編譯整個引擎。

visualscript 是編輯器中整合的一款基於節點的程式語言。可以通過拖拽節點或資源到場景圖中建立出新的**塊。

3d工作區當前提供的工具不如2d工作區那麼豐富,還需要使用外部程式或者外掛程式來編輯地形、複雜角色等。godot提供了完整的api用於擴充套件編輯器的功能。

(狀態機編輯器外掛程式,視覺化的方式管理狀態機)

godot基於mit許可證開放所有**,意味著相關所有技術都是免費的/自由的。

任何人都可以在自己的專案中編寫所需的合適的外掛程式,不需要和引擎一道發布,比如google admob、fmod。

另外,開放源**意味著你可以學習godot引擎並按你所需擴充套件。godot會列印出包含引擎在內的帶棧跟蹤資訊的錯誤,所以可以很簡單的除錯錯誤。

godot 由社群建立、也是為社群及所有遊戲創作者服務。通過使用者需求及開放討論來驅動godot核心功能公升級。核心開發者對於新特性的討論經常也是集中在是否有利於多數使用者上。

儘管有少量核心開發者是全職狀態,但截止當前我們這個專案已有超過600名貢獻者。這些善良的開發者開發的是他們自己可能需要的功能特性,所以在每個主版本中你都能看到引擎各方面的改進。

godot編輯器本身就是基於godot遊戲引擎執行。它使用了引擎自帶的ui系統,並且能在測試專案時「熱過載」**及場景、在編輯器中直接執行遊戲**。這意味著在你自己的遊戲中可以使用同樣的**和場景、或者構建外掛程式來擴充套件godot編輯器。

由此帶來了可靠的、靈活的ui系統,因為它首先要驅動godot編輯器自身。

在任意gdscript檔案的頭部加上 tool 關鍵字,它就會在編輯器中執行。這樣就可以編寫如自定義關卡編輯器之類的外掛程式了,或者用同樣的節點與api建立專案指令碼。

godot 分別提供了專門的2d和3d渲染引擎,2d場景的基本單位是畫素。

儘管引擎是分離的,但可以在3d中渲染2d,也可以在2d中渲染3d,以及在3d世界中疊加2d的精靈和介面。

原文:

設計的哲學

主要內容 一 基礎目標 設計乙個統一的網路系統,可以保證更高的整合度,提供更好的效能。多路傳輸使用分組交換實現,網路通過閘道器進行互聯。二 二級目標 1 即使網路和閘道器失效,網路通訊必須能夠繼續。2 網際網路必須支援多種通訊服務 3 網際網路絡結構必須能夠適應多種網路硬體 4 網際網路結構必須允許...

譯 Godot系列教程三 場景例項化(續)

場景例項化帶來很多便利的用法,總體來說有 場景例項化真正強悍的地方就在於它是以一種卓越的設計語言的機制執行的。這一點使得godot區別於其它引擎,並有很大的不同。godot整個引擎從底層開始都是圍繞著這個概念進行設計的。在使用godot製作遊戲時,建議把mvc或er圖這樣的設計模式先拋開一邊,而開始...

Unix設計的哲學

1 小既是美 相對於同類的龐然大物,小巧的事物有著無可比擬的巨大優勢。2 每個程式之作好一件事情 通過集中精力應對單一任務,程式可以減少很多冗餘的 從而避免過高的資源開銷 不必要的複雜性和缺乏靈活性。3 盡快建立原型 短時間內建立設計原型,有助於提高效率。4 舍高效率而取可移植性 unix作為第乙個...