為UE和Unity開發者準備的Godot指南
——兩位大哥打架,請帶上我
這兩天游戲行業又開始熱鬧了,昨天兩條信息直接刷爆朋友圈,最大的兩家游戲引擎公司懟起來了。
《為Unity開發者準備的虛幻引擎指南》:
為Unity開發者準備的虛幻引擎指南
《為虛幻引擎開發者準備的Unity指南》:
為虛幻引擎開發者準備的Unity指南
Unity、UE和Godot三個引擎的特色,見:
Unity、UE和Godot的優劣對比-CSDN博客
前言
在當今游戲開發領域,虛幻引擎和Unity引擎一直是開發者們首選的工具。然而,另一款強大而充滿潛力的引擎——Godot引擎,也逐漸受到越來越多開發者的青睞。本文針對那些熟悉虛幻或Unity引擎但想要學習并掌握Godot引擎的開發者,提供一份詳細的入門指南。
在使用Godot之前,用戶只需要到Godot的官網下載一份100MB左右的引擎本體即可。官網頁面可下載的引擎分為標準版與.Net版本,前者允許用戶使用Godot自制的腳本語言GDScript編寫游戲邏輯,后者則在前者的基礎上加增了對于C#語言的支持。而無論哪一種版本,用戶都可以直接打開引擎使用,而不須下載任何捆綁軟件或進行繁瑣的賬號驗證。
需要特別提醒的一點是,Godot引擎除了可以在WIndows、Mac、Linux等常見的開發平臺使用以外,還可以在Android平臺編輯并運行項目。
啟動引擎后,用戶會進入項目管理器程序。這是管理Godot項目的地方,用戶可以在這里管理游戲項目的新建、編輯與刪除操作。如下圖就是管理器中新建項目的操作,在這里我們可以看到新建項目時,用戶可以設置項目名稱、路徑、渲染器等項目信息。其中Godot為項目準備了三種不同的渲染器,Forward+是基于Vulkan實現的高性能渲染模式,適用于Windows等高性能平臺的大型3D游戲開發;Mobile則是基于Vulkan實現的移動端渲染模式,適用于移動端設備的游戲開發;最后的兼容模式是基于Opengl實現的渲染模式,此模式下導出的程序可以在各個平臺運行。
Godot編輯器?
創建、導入或編輯一個項目,用戶會進入Godot的編輯器界面。用戶可以在上方菜單欄的編輯器選項中點擊編輯器布局,改變編輯器內各個分區的位置,也可以將各個區塊提取為一個獨立的窗口,拖拽到電腦桌面的任一位置。
主視口?(Main?Viewport)
主視口是Godot的視口,這類似于Unity的Scene視圖與Ue的LevelViewport。用戶可以在此直觀的預覽、編輯游戲的2D與3D內容。
此外,用戶還可以點擊主視口上方的Script進入引擎自帶的腳本編輯區,這是一個引擎內置的IDE,它提供了對GDScript代碼的自動補全、查找、跳轉等功能。用戶無需借助外部軟件,即可在此編寫代碼。
場景(Scene?Dock)
場景欄對應的是Unreal中的WorldOutliner與Unity的Hierarchy窗口。用戶可以在此管理組織Godot的節點(Node),Node就類似于Ue中的Actor與Unity中的GameObject。但不同于Unity與Ue,Godot中并沒有組件的概念,Godot中的主要游戲對象基本由Node構成。用戶可以將場景欄中的節點信息保存形成一個新的場景文件,這類似于Unity中儲存prefab數據的文件,Godot中也會將一個文件內節點的集合稱為一個場景,場景欄可以同時管理節點與場景。
文件系統(File?System)
文件系統包含了一個項目中的所有可用資源文件,它類似于Unity中的Project窗口與Ue中的ContentBrowser,用戶可以在此整理、搜尋所需資源。需要注意的是此處顯示的并不是項目內的所有文件,而是項目中所有的可讀取的資源文件。
檢查器(Inspector)
檢查器的功能與Ue中的Details以及Unity中的Inspector面板相同,用戶單擊節點后可以在此查看和編輯相關對象的屬性。此外,當用戶選擇資源文件時,此處也將顯示對應文件的屬性。在檢查器的右側還擁有歷史與節點兩個面板。歷史面板可以查看和回退用戶在編輯器中的歷史操作。節點面板下用戶可以設置場景中節點的分組情況。
補充
除上述內容外,引擎的左上角與右上角還存在著兩排按鈕。
左上角排列的按鈕包括場景、項目、調試、編輯器、幫助五個按鈕,用戶可以在此查看或跳轉對應的按鈕內容。
右上角是引擎場景的啟動按鈕與渲染器設置按鈕。啟動按鈕從左至右依次為啟動主場景、暫停運行中的項目、終止運行項目、運行當前選中場景、運行特定場景、以電影模式運行場景。當我們選擇運行場景時,引擎就會啟動一個額外的窗口,來運行編輯中的項目內容。
渲染器設置按鈕會顯示當前啟用的渲染模式,用戶可以隨時切換渲染模式。
重要的游戲對象概念
節點(Node)
在Godot引擎中,節點(Node)是一種基本的構建單元,類似于Unity和Unreal?Engine(UE)中的GameObject或者Actor。每個節點都可以包含特定的功能、行為或屬性,如顯示2D圖像、3D模型、充當3D音源、用于制作UI界面等。并且節點之間可以建立父子關系,一個節點只能有一個父節點,但可以擁有多個子節點,子節點的變換(位置、旋轉、縮放)會受到父節點的影響。此外,節點可以包含腳本、組件和其他節點作為其子項,從而構建出復雜的場景和交互。
場景(Scene)
在Godot引擎中,場景(Scene)是游戲中的一個重要概念,一般用于表示若干節點的一個集合,它類似于Unity和Unreal?Engine(UE)中的場景概念,但又有一些獨特的特點。
場景是節點保存與加載的基礎單位。首先,用戶必須明確節點是Godot引擎中行駛功能的基本單位,而場景只是節點保存與加載的單位,Godot中的節點可以保存為tscn格式的場景文件,在需要時通過讀取文件生成具有對應屬性或特征的節點。如下圖即是一個場景文件,其中記錄了節點的名稱、類型、引用腳本、非默認屬性等信息內容,在程序運行時,Godot通過會讀取這些信息來構造對應的節點。
場景的本質依然是節點。在明確了上述信息后,我們需要明確,場景的本質依然是節點。在使用場景時,用戶常常會以場景的根節點來代為表述整個場景涉及的節點內容。因此,Godot的場景更加靈活。場景與場景、場景與節點之間就像節點與節點之間一樣可以互相組合、互相拼接,形成多樣的曾經結構。
Godot中游戲將從主場景運行。Godot中節點是最常用的游戲組件,在啟動游戲時,用戶需要選擇若干節點參與游戲的初始化,這需要用戶將一個場景設為主場景,當游戲啟動時,游戲將會對主場景中的節點進行實例化。
場景樹(SceneTree)
在Godot引擎中,場景樹是游戲主循環的一種具體實現,它可以管理Godot引擎中的渲染、物理、音頻、網絡等多個模塊的功能。還可以通過場景樹來對節點實行統一的調控工作。
資源(Resource)
資源是Godot中用于存儲和管理游戲中各種數據的重要概念,與UE和Unity中的資產具有一定的相似性。?
在Godot中,資源可以是各種不同類型的文件,例如紋理、模型、音頻、腳本、材質、場景等。每種資源都有其特定的用途和數據結構,可以被游戲中的節點和系統使用。
資源以文件的形式存儲在Godot項目中,并可以在編輯器中進行管理和預覽。這些資源可以通過Godot編輯器加載到項目中,在游戲運行時被使用。
資源可以在不同的場景或項目中被重復使用。對于某些資源,可以在Godot編輯器中進行編輯和修改,比如紋理可以進行重新調整、音頻可以進行剪輯等。
在Godot中,節點可以引用和使用資源,這些資源之間也可以存在依賴關系。例如,一個場景可能依賴于多個模型資源和紋理資源。
當一個圖片/3D模型資源文件被引入項目時,引擎一般會將此文件轉譯為一個新的數據文件,存入項目的緩存文件夾中,同時生成一個與文件同名的具有import后綴的文件,用來指向生成文件。當游戲運行時,引擎將會直接加載生成文件,而非導入的源文件。
Godot支持的文件格式:
2D圖片 | .bm、.dds、.exr?、.hdr、.jpg、.jpeg、.png、.svg、.webp |
音頻 | WAV、Ogg、MP3 |
3D模型 | GLTF、Glb、DAE、OBJ、FBX(引擎提供轉換插件)、blend |
Fonts | ttf等 |
視頻 | ogv等 |
項目文件系統
Godot的項目文件系統中,project.godot是其專屬的項目文件。其中記錄了項目的總體信息與項目設置的內容。
.godot文件夾是項目的緩存文件。Godot中許多的資源文件在引入Godot時,都會進行一次文件轉換,如3D模型將統一轉換為Godot內置的SCN文件夾,而后存入.godot中的imported文件中。資源文件也會生成一個同名的具有import后綴的文件來緩存此映射。
此外.godot中還包括了項目的編輯器部分設置信息、shader緩存、資源映射等內容。
常用系統
模型顯示
Godot中可以通過CSG節點或MeshInstance3D節點來顯示模型。
其中CSG模型節點可以顯示引擎內置的簡單的、不閉合、不自相交的簡單模型,如長方體、圓柱、球體、面片等,適用于快速制作原形設計。且CSG模型節點之間的頂點可以進行簡單的交、并、補計算,形成新模型,適用于游戲的原形設計開發。
MeshInstance3D節點可以用于顯示模型資源文件中存放的復雜模型。
MultiMeshInstance3D則啟用了GpuInstance手段,適用于優化大量給定網格實例的渲染(例如森林中的樹木或草叢)。
圖片顯示
Godot的圖片顯示可以通過多種不同的節點,2D游戲開發中常見的節點主要是Sprite2D與AnimatedSprite2D節點。其中,后者除了可以顯示圖片外,還可以預設多組圖片集合,控制每個集合內的圖片按照一定速率循環或非循環切換,從而制作序列幀動畫。
UI制作
Control類節點可以用于制作Godot的UI系統。這些節點的布局系統不同于傳統2D的坐標定位,而是會根據自己父級Control和同級Control節點的布局設置來動態調整自己的位置。
Control類節點主要分為Container節點與非Container節點。
非Container節點可以用于顯示圖片、文字、視頻、按鈕、輸入框等多種UI常用組件。
Container節點則具有一些控制布局的預設參數,可以設置子Control節點在水平或豎直方向上按一定的規律排布。
物理與碰撞
Godot在3D方面的物理與碰撞主要通過PhysicBody3D節點與Area3D節點實現。
其中Body方面常用的節點包括StaticBody3D節點、CharacterBody3D節點與RigidBody3D節點。
StaticBody3D節點適用于制作靜態的物理體;CharacterBody3D內置了較豐富的位置判斷函數,可用于編寫人物腳本;RigidBody3D節點預留了豐富的物理屬性,可以用于模擬非代碼控制的物理對象。
Area3D可以用于制作區域檢測對象,檢測區域內物理對象的進出、數目、以及集合。
在使用這些對象時,用戶需要使用CollisionPolygon3D或CollisionShape3D節點作為它們的字節點,用于描述這些物理對象的工作范圍。
動畫制作
在制作動畫時,用戶一般可以使用AnimationPlayer節點來制作動畫。使用此節點時,用戶需要為它創建對應的動畫資源。
AnimationPlayer節點使用的資源可以描述時間軸上不同對象多個屬性的變化,以及函數調度的時機,還可以設置屬性變化的曲線類型,動畫循環情況等參數,是一個在動畫方面功能非常豐富的節點。