Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
為場景編寫腳本
本課將向你介紹 Godot 中可用的指令碼語言。你將瞭解每個選項的優點和缺點。在下一部分,你將使用 GDScript 編寫你的第一個腳本。
腳本附加到節點並擴充其行為 。這意味著腳本繼承所附加節點的全部函式和屬性。
例如,以一個 Camera2D 節點跟隨一艘船的遊戲為例。Camera2D 節點預設跟隨其父節點。想像一下,當玩家受到傷害時,您希望相機震動。由於此功能未內建在 Godot 中,因此您可以在該 Camera2D 節點上附加腳本並對抖動進行程式設計。
與其他腳本語言溝通
Godot 提供了四種遊戲程式設計語言:GDScript、C# 以及通過 GDExtension 技術提供的 C 和 C++。還有更多社群支援的語言,但這四個是官方語言。
您可以在一個專案中使用多種語言。例如,在團隊中,您可以在 GDScript 中編寫遊戲邏輯,因為它編寫起來很快,並使用 C# 或 C++ 來實作複雜的演算法並最大限度地提高其性能。或者您可以使用 GDScript 或 C# 編寫所有內容。由您決定。
我們提供這種靈活性以滿足不同遊戲專案和開發者的需求。
GDScript是什麼?為什麼我要用它?
如果你是初學者,我們推薦 從 GDScript 入手 。這門語言是我們針對 Godot 和遊戲開發者的需求製作的。語法簡單直白,與 Godot 結合得最為緊密。
使用 C# 時,你需要使用 VSCode 或 Visual Studio 等外部編輯器。雖然對 C# 支援目前已經成熟,但相對 GDScript 而言,能找到的學習資源會比較少。因此,我們主要推薦已經熟悉 C# 語言的使用者去使用 C#。
讓我們來看看各個語言的功能,以及優缺點。
GDScript
GDScript 是一門 物件導向 的 指令式 程式設計語言,專為 Godot 建構。是遊戲開發者為遊戲開發者製作的,目的是節省編寫遊戲程式碼的時間。它的功能包括:
簡單的語法,讓檔更短。
極快的編譯和載入速度。
編輯器整合讓作業過程變得更開心。節點、訊號以及其他與正在編輯的場景有關的專案都能進行程式碼補全。
有內建 Vector 型別 (如 Vector, Transform…等),當需要大量線性代數運算時更有效率。
與靜態型別相比效能較差。
No tracing garbage collection, as this feature eventually gets in the way when creating games. The engine counts references and manages the memory for you in most cases by default, but you can also control memory if you need to.
緩型別 。變數預設是動態型別,但你也可以使用型別提示來做強型別檢查。
因為 GDScript 用縮進來做程式碼塊的結構化,所以它看上去像 Python,不過實際上這兩者的原理截然不同。GDScript 是從 Squirrel、Lua、Python 等諸多語言中得到的靈感。
備註
我們為什麼不直接使用 Python 或者 Lua?
很多年前,Godot 使用過 Python,後來也用過 Lua。這兩個語言的集成花費了大量精力,並且還存在局限性。例如,在 Python 中做多執行緒支援是非常大的挑戰。
開發專屬語言不會花費更多的時間,我們還能針對遊戲開發者的需求去量體裁衣。我們現在在做性能優化工作,以及用協力廠商語言難以實作的功能。
.NET / C#
由於微軟的 C# 在遊戲開發者中非常受歡迎,我們也提供了官方支援。C# 是一個成熟且彈性的語言,有大量可用的函式庫。多虧了微軟的慷慨捐助,我們才能夠加入對 C# 的支援。
C# 在易用度與效能間的平衡做得非常優秀,雖然需要注意一下記憶體回收行程。
備註
你必須使用 .NET版本的 Godot 編輯器才能在專案中使用 C# 進行程式設計。你可以在 Godot 網站的 下載 頁面進行下載。
由於 Godot 使用 .NET 8,理論上,您可以在 Godot 中使用任何第三方的 .NET 函式庫或框架,以及任何符合通用語言基礎架構(Common Language Infrastructure,CLI)的程式語言,例如 F#、Boo 或 ClojureCLR。然而,C# 是唯一官方支援的 .NET 選項。
備註
GDScript 程式碼本身的執行是沒有 C# 或 C++ 等編譯型語言快的。然而,大多數腳本程式碼都是在呼叫引擎中的 C++ 程式碼快速演算法。在許多情況下,使用 GDScript、C#、C++ 編寫遊戲邏輯並不會有顯著的性能區別。
注意
使用Godot 4以C#編寫的專案目前無法匯出至Web平台。若要在該平台上使用C#,請考慮使用Godot 3。從Godot 4.2開始,提供Android與iOS平台的支援,但其仍處於實驗階段,且 存在一些限制。
也參考
想進一步了解 C#,請參閱 C#/.NET 區段。
通過 GDExtension 使用 C++
最後是 3.0 版所新增的亮點:GDNative。使用 GDNative 就可以在不需要重新編譯 (甚至重新啟動) Godot 的情況下以 C++ 來寫腳本。
可以使用任一版本的 C++。而因為使用了內部 C API Bridge,也可以正常使用由不同編譯器產生的共用函式庫。
若要追求效能,GDNative / C++ 是最好的選擇。而且不需要整個遊戲都改用 GDNative / C++,其他部分還是可以用 GDScript 或視覺腳本 (Visual Script) 來寫。話雖如此,GDNative 的 API 還是很清楚簡單的,因為大部分都是直接用 Godot 原生 API。
當使用 GDExtension 時,可用的型別、函式和屬性與 Godot 實際的 C++ API 非常相似。
總結
腳本是包含附加到節點以擴充其功能的程式碼檔。
Godot 支援四種官方指令碼語言,在性能和易用性之間為你提供靈活性。
你可以混合語言,例如,用 C 或 C++ 實作高要求的演算法,用 GDScript 或 C# 編寫大部分的遊戲邏輯。