Work in progress

The content of this page was not yet updated for Godot 4.2 and may be outdated. If you know how to improve this page or you can confirm that it's up to date, feel free to open a pull request.

為場景編寫腳本

本課將向你介紹 Godot 中可用的指令碼語言。你將瞭解每個選項的優點和缺點。在下一部分,你將使用 GDScript 編寫你的第一個腳本。

腳本附加到節點並擴充其行為 。這意味著腳本繼承所附加節點的全部函式和屬性。

例如,以一個 Camera2D 節點跟隨一艘船的遊戲為例。Camera2D 節點預設跟隨其父節點。想像一下,當玩家受到傷害時,您希望相機震動。由於此功能未內建在 Godot 中,因此您可以在該 Camera2D 節點上附加腳本並對抖動進行程式設計。

../../_images/scripting_camera_shake.gif

與其他腳本語言溝通

Godot 提供了 四種遊戲程式設計語言 :GDScript、C# 以及通過 GDExtension 技術提供的 C 和 C++。還有更多社區支援的語言,但這四個是官方語言。

您可以在一個專案中使用多種語言。例如,在團隊中,您可以在 GDScript 中編寫遊戲邏輯,因為它編寫起來很快,並使用 C# 或 C++ 來實作複雜的演算法並最大限度地提高其性能。或者您可以使用 GDScript 或 C# 編寫所有內容。由您決定。

我們提供這種靈活性以滿足不同遊戲專案和開發者的需求。

GDScript是什麼?為什麼我要用它?

如果你是初學者,我們推薦 從 GDScript 入手 。這門語言是我們針對 Godot 和遊戲開發者的需求製作的。語法簡單直白,與 Godot 結合得最為緊密。

../../_images/scripting_gdscript.png

使用 C# 時,你需要使用 VSCode 或 Visual Studio 等外部編輯器。雖然對 C# 支援目前已經成熟,但相對 GDScript 而言,能找到的學習資源會比較少。因此,我們主要推薦已經熟悉 C# 語言的使用者去使用 C#。

讓我們來看看各個語言的功能,以及優缺點。

GDScript

GDScript 是一門 物件導向指令式 程式設計語言,專為 Godot 建構。是遊戲開發者為遊戲開發者製作的,目的是節省編寫遊戲程式碼的時間。它的功能包括:

  • 簡單的語法,讓檔更短。

  • 極快的編譯和載入速度。

  • 編輯器整合讓作業過程變得更開心。節點、訊號以及其他與正在編輯的場景有關的專案都能進行程式碼補全。

  • 有內建 Vector 型別 (如 Vector, Transform…等),當需要大量線性代數運算時更有效率。

  • 與靜態型別相比效能較差。

  • 沒有 垃圾回收 ,因為最終會影響遊戲的開發。引擎會預設進行引用計數,在大多數情況下為你管理記憶體,但你也可以在需要時自行控制記憶體。

  • 緩型別 。變數預設是動態型別,但你也可以使用型別提示來做強型別檢查。

因為 GDScript 用縮進來做程式碼塊的結構化,所以它看上去像 Python,不過實際上這兩者的原理截然不同。GDScript 是從 Squirrel、Lua、Python 等諸多語言中得到的靈感。

備註

我們為什麼不直接使用 Python 或者 Lua?

很多年前,Godot 使用過 Python,後來也用過 Lua。這兩個語言的集成花費了大量精力,並且還存在局限性。例如,在 Python 中做多執行緒支援是非常大的挑戰。

開發專屬語言不會花費更多的時間,我們還能針對遊戲開發者的需求去量體裁衣。我們現在在做性能優化工作,以及用協力廠商語言難以實作的功能。

.NET / C#

微軟的 C# 是很受遊戲開發者歡迎的語言,所以 Godot 也新增了對 C# 的官方支援。C# 是一個成熟的語言,有許多程式都是用 C# 寫的。要感謝微軟慷慨的捐款讓我們能夠支援 C#。

../../_images/scripting_csharp.png

C# 在易用度與效能間的平衡做得非常優秀,雖然需要注意一下記憶體回收行程。

備註

你必須使用 .NET版本的 Godot 編輯器才能在專案中使用 C# 進行程式設計。你可以在 Godot 網站的 下載 頁面進行下載。

Godot 使用了 Mono .NET 執行環境,理論上任一第三方 .NET 函式庫或框架都可以拿來在 Godot 裡使用。同樣的,理論上其他 CLI (Common Language Infrastructure,通用語言基礎結構) 相容的程式語言也都能使用,如 F#, Boo 或是 ClojureCLR。但 C# 是唯一官方支援的 .NET 選項。

備註

GDScript 程式碼本身的執行是沒有 C# 或 C++ 等編譯型語言快的。然而,大多數腳本程式碼都是在呼叫引擎中的 C++ 程式碼快速演算法。在許多情況下,使用 GDScript、C#、C++ 編寫遊戲邏輯並不會有顯著的性能區別。

注意

Projects written in C# using Godot 4 currently cannot be exported to the web platform. To use C# on that platform, consider Godot 3 instead. Android and iOS platform support is available as of Godot 4.2, but is experimental and some limitations apply.

通過 GDExtension 使用 C++

最後是 3.0 版所新增的亮點:GDNative。使用 GDNative 就可以在不需要重新編譯 (甚至重新啟動) Godot 的情況下以 C++ 來寫腳本。

../../_images/scripting_cpp.png

可以使用任一版本的 C++。而因為使用了內部 C API Bridge,也可以正常使用由不同編譯器產生的共用函式庫。

若要追求效能,GDNative / C++ 是最好的選擇。而且不需要整個遊戲都改用 GDNative / C++,其他部分還是可以用 GDScript 或視覺腳本 (Visual Script) 來寫。話雖如此,GDNative 的 API 還是很清楚簡單的,因為大部分都是直接用 Godot 原生 API。

當使用 GDExtension 時,可用的型別、函式和屬性與 Godot 實際的 C++ API 非常相似。

總結

腳本是包含附加到節點以擴充其功能的程式碼檔。

Godot 支援四種官方指令碼語言,在性能和易用性之間為你提供靈活性。

你可以混合語言,例如,用 C 或 C++ 實作高要求的演算法,用 GDScript 或 C# 編寫大部分的遊戲邏輯。