每款游戲引擎都有不同定位、滿足不同的需求。這不僅因為它們所提供的功能不同,更在於每款引擎獨特的設計。這些引擎背后各自的設計哲學,會給游戲帶來不同的開發流程和開發方式。
面向對象設計
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編輯器本身就是基於Godot游戲引擎運行。它使用了引擎自帶的UI系統,並且能在測試項目時“熱重載”代碼及場景、在編輯器中直接運行游戲代碼。這意味着在你自己的游戲中可以使用同樣的代碼和場景、或者構建插件來擴展Godot編輯器。
由此帶來了可靠的、靈活的UI系統,因為它首先要驅動Godot編輯器自身。

RPG in a Box
在任意GDScript文件的頭部加上 tool 關鍵字,它就會在編輯器中運行。這樣就可以編寫如自定義關卡編輯器之類的插件了,或者用同樣的節點與API創建項目腳本。
分離的2D/3D引擎
Godot 分別提供了專門的2D和3D渲染引擎,2D場景的基本單位是像素。
盡管引擎是分離的,但可以在3D中渲染2D,也可以在2D中渲染3D,以及在3D世界中疊加2D的精靈和界面。
原文:https://docs.godotengine.org/en/stable/getting_started/step_by_step/godot_design_philosophy.html
