每款游戲引擎都有不同定位、滿足不同的需求,這不僅因為它們所提供的功能不同,更在于每款引擎獨特的設計,這些引擎背后各自的設計哲學,會給游戲帶來不同的開發流程和開發方式,
面向物件設計
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/2213.html
標籤:其他
