Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

建立內容

Godot 中能夠為不同的 UI 節點設定指定的字形。

您可以在三個不同的位置設定字形使用。第一個是主題編輯器。選擇要為其設定字形的節點,然後選擇字形標籤。第二個位於 Theme Overrides > Fonts 下的控制節點屬性面板。最後,在**預設字形**下的主題屬性面板設定中。

如果在任何地方都沒有指定字形覆蓋,則使用「Open Sans <https://fonts.google.com/specimen/Open+Sans>」__ SemiBold 作為預設專案字形。

備註

從 Godot 4.0 開始,字形大小不再在字形本身中定義,而是在使用該字形的節點中定義。這是在屬性面板的 主題覆蓋 > 字形大小 部分完成的。

這允許更改字形大小,而不必為每個不同的字形大小複製字形資源。

有兩種字型檔案:*動態*(TTF/OTF/WOFF/WOFF2 格式)和*點陣圖*(BMFont .fnt 格式或等寬影像)。動態字形是最常用的選項,因為它們可以調整大小,並且在較大尺寸下仍然看起來清晰。由於其基於向量的性質,與點陣字形相比,它們還可以包含更多的字形,同時保持合理的檔案大小。動態字形也支援點陣字形無法支援的一些進階功能,例如*連字*(多個字元轉換為單一不同的設計)。

小訣竅

您可以在「Google Fonts <https://fonts.google.com/>」和「Font Library <https://fontlibrary.org/>」等網站上找到免費授權的字型檔案。

字形受版權保護。使用字形之前請仔細檢查字形的許可證,因為並非所有字形都允許在不購買許可證的情況下進行商業使用。

也參考

除了這份說明文件,你可能也會想看看 Godot Demo 專案

動態性

Godot 支援下列 3D 場景檔案格式

  • TrueType 字形或合集(.ttf.ttc

  • OpenType 字形或合集(.otf.otc

  • Web 開放字形格式 1(.woff

  • Web 開放字形格式 2(.woff2,從 Godot 3.5 開始支援)

雖然“.woff”,特別是“.woff2”往往會導致較小的檔案大小,但沒有普遍“更好”的字形格式。在大多數情況下,建議使用字形開發人員網站上提供的字形格式。

點陣字型

Godot 支援 BMFont (.fnt) 點字字形格式。這是由 BMFont 程式所建立的格式。也存在許多 BMFont 相容程式,例如「BMGlyph <https://www.bmglyph.com/>」。

或者,您可以匯入任何圖像以用作點陣字形。僅支援**等寬**字形(每個字元具有相同寬度的字形)。為此,請在檔案系統擴充座中選擇圖像,請前往匯入擴充塢,將其匯入型別變更為 字形資料(等寬影像字形),然後按一下 重新匯入

將匯入型別變更為字形資料(等寬圖像字形)

將匯入型別變更為 字形資料(等寬圖像字形)

字形的字元集佈局可以採用任何順序,但建議使用與標準 Unicode 相符的順序,因為匯入它們所需的配置要少得多。例如,下面的點陣圖字形包含 ASCII 字元並遵循標準 ASCII 排序:

在下方範例中:

圖片來源:`LibreQuake <https://github.com/MissLav/LibreQuake/blob/master/lq1/gfx-wad/CONCHARS.png>`__(縮放和裁剪以排除擴充範圍)

這個節點有如下屬性可供設定:

用於上述範例字形的匯入選項

用於上述範例字形的匯入選項

**字元範圍**選項是一個對應影像上每個位置的陣列(以圖塊座標,而不是像素為單位)。字形合集是從左到右、從上到下走訪的。字元可以用十進位數字(127)、十六進位數字(0x007f)或*單*引號('~')之間指定。可以使用字元之間的連字符指定範圍。

例如,「0-127」(或「0x0000-0x007f」)表示完整的 ASCII 範圍。另一個例子,''-'~' 等價於``32-127`` 並表示*可列印*(可見)ASCII 字元的範圍。

確保**字元範圍**選項不超過定義的**列** × **行**的數量。否則,字形將無法匯入。

如果您的字形圖像包含未用於字形字形的邊距(例如屬性資訊),請嘗試調整**圖像邊距**。這是在整個影像周圍僅應用一次的邊距。

如果您的字形影像包含參考線(以字形之間的線條形式)或字元之間的間距看起來不正確,請嘗試調整**字元邊距**。此邊距適用於每個匯入的字形。

使用檔案

若要載入字形檔案(動態或點陣圖),請使用字形屬性旁的資源下拉列表的 快速載入載入 選項,然後導覽至相關字型檔案:

../../_images/using_fonts_load_font.webp

使用檔案

您也可以將字型檔案從檔案系統停靠列拖曳到接受字形資源的屬性面板屬性中。

警告

在Godot 4.0及更高版本中,紋理篩選器和重複屬性是在使用紋理的位置定義的,而不是在紋理本身上定義的。這也適用於字形(動態字形和點陣字形)。

具有像素藝術外觀的字形應透過將**渲染>紋理>畫布紋理>預設紋理篩選器**專案設定更改為**最近**來停用雙線性篩選。

字形大小也必須是設計大小的整數倍(根據每種字形而變化),並且使用該字形的控制節點也必須以整數倍縮放。否則,字形可能看起來模糊。 Godot 中的字形大小以像素 (px) 為單位,而非點 (pt)。在比較不同軟體之間的字形大小時請記住這一點。

也可以透過設定 CanvasItem.texture_filter 在繼承自 CanvasItem 的各個節點上設定紋理篩選器模式。

Font outlines and shadows

Font outlines and shadows can be used to improve readability when the background color isn't known in advance. For instance, this is the case for HUD elements that are drawn over a 2D/3D scene.

Font outlines are available in most nodes that derive from Control, in addition to Label3D.

To enable outline for a font on a given node, configure the theme overrides Font Outline Color and Outline Size in the inspector. The result should look like this:

Font outline example

Font outline example

備註

If using a font with MSDF rendering, its MSDF Pixel Range import option be set to at least twice the value of the outline size for outline rendering to look correct. Otherwise, the outline may appear to be cut off earlier than intended.

Support for font shadows is more limited: they are only available in Label and RichTextLabel. Additionally, font shadows always have a hard edge (but you can reduce their opacity to make them look more subtle). To enable font shadows on a given node, configure the Font Shadow Color, Shadow Offset X, and Shadow Offset Y theme overrides in a Label or RichTextLabel node accordingly:

Configuring font shadow in a Label node

Configuring font shadow in a Label node

The result should look like this:

Font shadow example

Font shadow example

小訣竅

You can create local overrides to font display in Label nodes by creating a LabelSettings resource that you reuse across Label nodes. This resource takes priority over theme properties.

預設功能

抗鋸齒

您可以透過調整*抗鋸齒*和*提示*來調整渲染時字形的平滑方式。這些是不同的屬性,具有不同的用例。

抗鋸齒控制光柵化字形時應如何平滑字形邊緣。預設的抗鋸齒方法(灰階)適用於每種顯示技術。然而,在小尺寸下,灰階抗鋸齒可能會導致字形看起來模糊。

可以透過使用 LCD 子像素優化來提高抗鋸齒清晰度,該優化透過在每個通道(紅/綠/藍)的基礎上偏移字形抗鋸齒來利用大多數 LCD 顯示器的子像素模式。缺點是這可能會在邊緣產生“邊緣”,尤其是在不使用標準 RGB 子像素的顯示技術(例如 OLED 顯示器)上。

在大多數遊戲中,建議堅持使用預設的**灰階**抗鋸齒。對於非遊戲應用,LCD 子像素優化值得探索。

視覺比較

由上至下:停用、灰階、LCD 子像素 (RGB)

備註

MSDF 渲染字形 上的抗鋸齒功能無法變更 - 這些字形始終使用灰階抗鋸齒進行渲染。

微調

提示控制在光柵化字形時應如何積極地將字形邊緣捕捉到像素。 會產生最平滑的外觀,這會使字形在小尺寸下看起來模糊。 淺色**(預設)透過僅將字形邊緣捕捉到Y 軸上的像素來變得更加清晰,而**全 透過將字形邊緣捕捉到X 軸和Y 軸上的像素來更加清晰。根據個人喜好,您可能更喜歡使用一種提示模式而不是另一種。

視覺比較

由上至下:無、淺色、完整提示

備註

如果點選「重新匯入」後變更提示模式沒有明顯效果,通常是因為字型不包含提示指令。可以透過尋找包含提示指令的字型檔案版本或在匯入塢中啟用 強制自動提示 來解決此問題。這將使用 FreeType 的自動提示器自動為匯入的字型新增提示指令。

次像素定位

子像素定位可以調整。這是一個 FreeType 功能,允許字形渲染得更接近其預期形式。預設設定「自動」會在小尺寸下自動啟用子像素定位,但在大字形尺寸下停用子像素定位,以提高光柵化效能。

您可以將子像素定位模式強制設定為**停用**、二分之一像素**或**四分之一像素**四分之一像素**可提供最佳質量,但代價是光柵化時間較長。

更改抗鋸齒、提示和子像素定位在較小的字形大小下具有最明顯的效果。

警告

具有像素藝術外觀的字形應將其子像素定位模式設為**禁用**。否則,字形的像素大小可能會顯得不均勻。

點陣字形不需要此步驟,因為子像素定位僅與動態字形(通常由向量元素組成)相關。

Mipmap

預設情況下,字形不會產生 mipmap,以減少記憶體使用並加快光柵化速度。但是,這可能會導致縮小後的字形變得有顆粒感。對於未啟用 固定大小3D 文字,這一點尤其明顯。當在比例低於「(1, 1)」的控制節點中使用傳統光柵化(非 MSDF)字形顯示文字時,也會發生這種情況。

在檔案系統擴充座中選擇字形後,您可以在匯入擴充座中啟用 Mipmaps 以改善縮小字形的渲染外觀。

Mipmaps can be enabled on MSDF fonts as well. This can improve font rendering quality a little at smaller-than-default sizes, but MSDF fonts are already resistant to graininess out of the box.

MSDF 字形渲染

多通道帶符號距離場(Multi-channel signed distance field,MSDF)字形渲染能夠將字形渲染為任意大小,無需在大小發生變化時重新柵格化。

與 Godot 預設使用的傳統字形柵格化相比,MSDF 字形渲染有兩個優點:

  • 即便文字非常巨大,字形看上去也總是清晰的。

  • 首次渲染*大字型大小字形*的字元時卡頓更短,因為無須執行柵格化。

MSDF 字形渲染的缺點有:

  • 字形渲染的基礎開銷較高。桌面平臺上通常無法察覺,但是會影響低端移動裝置。

  • 由於缺少微調,較小的字形沒有柵格化字形清晰。

  • 與傳統的柵格化字形相比,首次為新字形渲染*小字型大小字形*的開銷可能更大。可以使用 渲染 緩解。

  • 無法為 MSDF 字形啟用 LCD 次像素優化。

  • MSDF 模式下無法正確渲染輪廓自相交的字形。如果使用從 Google Fonts 等處下載到的字形時出現渲染問題,請嘗試改為從作者的官方網站下載。

Comparison of font rasterization methods

Comparison of font rasterization methods. From top to bottom: rasterized without oversampling, rasterized with oversampling, MSDF

To enable MSDF rendering for a given font, select it in the FileSystem dock, go to the Import dock, enable Multichannel Signed Distance Field, then click Reimport:

Enabling MSDF in the font's import options

Enabling MSDF in the font's import options

使用空白字元

Godot 對 Emoji 字形的支援有限:

  • 支援 CBDT/CBLC(內嵌 PNG)和 SVG Emoji 字形。

  • 不支援 COLR/CPAL Emoji 字形(自訂向量格式)。

  • 不支援 EMJC 點陣圖壓縮(iOS 系統 Emoji 字形需要用到)。這意味著如果要在 iOS 上支援 Emoji,你就必須改用自訂的使用 SVG 或 PNG 點陣圖壓縮的字形。

為了讓 Godot 能夠顯示表情符號,所使用的字形(或其:ref:後備字形之一 <doc_using_fonts_font_fallbacks>)需要包含它們。否則,表情符號將不會顯示,而是會出現佔位符「豆腐」字元:

嘗試在標籤中使用 Emoji 的預設外觀

嘗試在標籤中使用 Emoji 的預設外觀

新增字形來顯示表情符號(例如「Noto Color Emoji <https://fonts.google.com/noto/specimen/Noto+Color+Emoji>`__」)後,您將獲得預期結果:

為標籤新增 Emoji 字形後的正確外觀

為標籤新增 Emoji 字形後的正確外觀

若要在表情符號旁使用常規字形,建議在常規字形的進階匯入選項中指定指向表情符號字形的:ref:後備字形 <doc_using_fonts_font_fallbacks>。如果您希望在顯示表情符號時使用預設專案字形,請將 FontVariation 中的 Base Font 屬性保留為空,同時新增指向表情符號字形的後備字形:

小訣竅

表情符號字形非常大,因此您可能需要載入:ref:系統字形 <doc_using_fonts_system_fonts> 來提供表情符號字形,而不是將其與您的專案捆綁在一起。這允許在您的專案中提供完整的表情符號支援,而無需增加其匯出的 PCK 的大小。缺點是表情符號會根據平台的不同看起來有所不同,並且並非所有平台都支援載入系統字形。

也可以使用系統字體作為後備字體。

2 個檢視區

Fontello 等工具可用於產生包含從 SVG 檔案匯入的向量的字型檔案。這可用於將自訂向量元素渲染為文字的一部分,或使用 doc_3d_text 和 TextMesh 建立擠壓 3D 圖示。

備註

Fontello 目前不支援建立多色字形(Godot 可以渲染)。截至 2022 年 11 月,圖標字形產生工具對彩色字形的支援仍然很少。

根據您的用例,與在 RichTextLabel 中使用 img 標籤相比,這可能會帶來更好的結果。與點陣圖影像(包括由 Godot 匯入時光柵化的 SVG)不同,真正的向量資料可以調整為任意大小,而不會損失品質。

下載生成的字型檔案後,將其載入到 Godot 專案中,然後將其指定為 Label、RichTextLabel 或 Label3D 節點的自訂字形。切換到 Fontello Web 介面,然後透過選擇該字元並按 Ctrl + C`(在 macOS 上:kbd:`Cmd + C)來複製該字元。將字元貼到標籤節點的 Text 屬性中。該字元將在屬性面板中顯示為佔位符字形,但它應該在 2D/3D 視窗中正確顯示。

若要在同一控制項中將圖示字形與傳統字形一起使用,您可以將圖示字形指定為 Fallback。這是可行的,因為圖示字形使用 Unicode 專用區域,該區域保留供自訂字形使用,並且在設計上不包含標準字形。

備註

幾種現代圖示字形,例如“Font Awesome 6 <https://fontawesome.com/download>”,有一個使用*連字*來指定圖示的桌面變體。這允許您透過直接在任何可以顯示字形的節點的 Text 屬性中輸入圖示名稱來指定圖示。一旦圖示的名稱以文字形式完整輸入(例如“house”),它將被圖示取代。

雖然更易於使用,但此方法不能與字形後備一起使用,因為主要字形的字元將優先於後備字形的連字。

字形退回

當主字形缺少要顯示的字形時,Godot 支援定義一個或多個後備。定義字形後備有 2 個主要用例:

  • 使用僅支援拉丁字元集的字形,但使用其他字形可以顯示其他字元集(例如西里爾字母)的文字。

  • 使用一種字形呈現文字,使用另一種字形呈現表情符號或圖示。

雙擊檔案系統停靠列中的字型檔案,開啟「進階匯入設定」對話框。您也可以在檔案系統底座中選擇字形,前往匯入底座,然後選擇底部的**進階...**:

../../_images/using_fonts_advanced_import_settings.webp

匯入流程

在出現的對話方塊中,在右側邊欄上尋找 Fallbacks 部分,按一下 Array[Font] (size 0) 文字以展開屬性,然後按一下 Add Element

../../_images/using_fonts_font_fallbacks_add.webp

新增字形退回

點擊新元素上的下拉箭頭,然後使用 快速載入載入 選項選擇字形檔案:

../../_images/using_fonts_font_fallbacks_load.webp

載入字形退回

使用預設專案字形時可以新增後備字形。為此,請將 Base Font 屬性留空,同時新增一種或多種字形後備。

備註

字形後備也可以在本地定義,類似於 預設功能,但出於簡潔原因,這裡不介紹。

變數

Godot 完全支援`可變字形 <https://variablefonts.io/>`__,它允許您使用單一字形檔案來表示各種字形粗細和樣式(常規、粗體、斜體等)。您正在使用的字形檔案必須支援此功能。

若要使用可變字形,請在要使用該字形的位置建立一個 FontVariation 資源,然後在 FontVariation 資源中載入字形檔案:

../../_images/using_fonts_font_variation_create.webp

建立自己的資源

../../_images/using_fonts_font_variation_load.webp

為 FontVariation 資源載入字形檔

向下捲動至 FontVariation 的 變化 部分,然後按一下 變更座標 文字以展開可調整的軸列表:

../../_images/using_fonts_font_variation_variable_font.webp

功能列表

您可以調整的軸集取決於載入的字形。有些可變字形僅支援一個調整軸(通常為*粗細*或*傾斜*),而其他可變字形可能支援多個調整軸。

例如,這裡是`Inter V <https://rsms.me/inter/>`__ 字形,其*粗細*為“900”,*傾斜*為“-10”:

../../_images/using_fonts_font_variation_variable_font_example.webp

可變字形範例(Inter V)

小訣竅

雖然可變字形軸名稱和比例沒有標準化,但字形設計者通常遵循一些常見的約定。例如,weight 軸通常使用“400”作為“常規”字形粗細,使用“700”作為“粗體”字形粗細。

您可以將 FontVariation 儲存到「.tres」資源檔案中,以便在其他地方重複使用它:

../../_images/using_fonts_font_variation_save_to_file.webp

將 FontVariation 保存為外部資源檔

假粗體和假斜體

當以粗體或斜體書寫文字時,使用專門為此設計的字形變體看起來會更好。使用粗體時,字形之間的間距將更加一致,並且某些字形的形狀可能會在斜體變體中完全改變(比較“a”和*“a”*)。

然而,真正的粗體和斜體字形需要傳送更多的字形檔案,這會增加分發大小。也可以使用單一:ref:可變字形 <doc_using_fonts_variable_fonts> 檔案,但該檔案將比單一非可變字形大。雖然檔案大小對於桌面專案來說通常不是問題,但對於努力保持分發大小盡可能小的行動/Web 專案來說,這可能是一個問題。

為了允許顯示粗體和斜體字形而無需提供額外的字形(或使用尺寸較大的可變字形),Godot 支援 faux 粗體和斜體。

仿粗體/斜體(上),真粗體/斜體(下)。使用的普通字形:Open Sans SemiBold

仿粗體/斜體(上),真粗體/斜體(下)。使用的普通字形:Open Sans SemiBold

如果沒有為粗體和/或斜體提供自訂字形,則會在 RichTextLabel 的粗體和斜體標籤中自動使用仿粗體和斜體。

若要使用仿粗體,請在需要 Font 資源的屬性中建立 FontVariation 資源。將 Variation > Embolden 設為正值以使字形更粗,或設為負值以使其不那麼粗體。根據字形,建議值介於「0.5」和「1.2」之間。

仿斜體是透過傾斜文字建立的,這是透過修改每個字元的轉換來完成的。這也在 FontVariation 中使用 Variation > Transform 屬性提供。將字元轉換的“yx”元件設為正值將使文字變為斜體。根據字形,建議值介於「0.2」和「0.4」之間。

調整字形間距

出於風格目的或為了更好的可讀性,您可能需要調整字形在 Godot 中的呈現方式。

在需要 Font 資源的屬性中建立 FontVariation 資源。 **變化 > 額外間距**部分中有 4 個可用屬性,它們接受正值和負值:

  • 字形: 每個字形之間的額外間距。

  • 空格: 單字之間的額外間距。

  • 頂部: 字形上方的額外間距。這用於多行文字,但也用於計算控制項的最小大小,例如 LabelButton

  • 頂部: 字形下方的額外間距。這用於多行文字,但也用於計算控制項的最小大小,例如 LabelButton

也可以調整 變化 > 變換 屬性以水平或垂直拉伸字元。這是透過調整“xx”(水平比例)和“yy”(垂直比例)組件來具體完成的。請記住調整字形間距以適應任何變化,因為字形轉換不會影響每個字形在文字中佔用的空間。應謹慎使用這種非均勻縮放,因為字形通常不設計為透過拉伸顯示。

預設功能

Godot 支援啟用 OpenType 字形功能,這是一種定義替代字符的標準化方法,可以切換這些字符,而無需完全交換字形檔案。儘管被命名為 OpenType 字型功能,但 TrueType (.ttf) 和 WOFF/WOFF2 字型檔案也支援這些功能。

對 OpenType 功能的支援很大程度上取決於所使用的字形。某些字形不支援任何 OpenType 功能,而其他字形可以支援數十種可切換功能。

There are 2 ways to use OpenType font features:

全域字形檔案

雙擊檔案系統停靠列中的字型檔案,開啟「進階匯入設定」對話框。您也可以在檔案系統底座中選擇字形,前往匯入底座,然後選擇底部的**進階...**:

../../_images/using_fonts_advanced_import_settings.webp

匯入流程

在出現的對話方塊中,在右側側邊欄上尋找**元資料覆蓋> OpenType 功能**部分,按一下**功能(N 群組中的0 個)** 文字以展開屬性,然後按一下**新增特徵**:

../../_images/using_fonts_advanced_import_settings_opentype_features.webp

高級匯入設定中的 OpenType 功能覆蓋

在特定字形使用(FontVariation)

若要使用字型功能,請建立 FontVariation 資源,就像建立可變字型 <doc_using_fonts_variable_fonts>` 一樣,然後在 FontVariation 資源中載入字型檔案:

../../_images/using_fonts_font_variation_create.webp

建立自己的資源

../../_images/using_fonts_font_variation_load.webp

在 FontVariation 資源中載入字形檔

向下捲動至FontVariation 的**OpenType Features** 部分,按一下**Features (0 of N set)** 文字以展開屬性,然後按一下**Add Feature** 並在下拉列表中選擇所需的功能:

../../_images/using_fonts_font_variation_opentype_features.webp

在 FontVariation 資源中指定 OpenType 功能

例如,這裡是沒有 Slashed Zero 功能(頂部)的 Inter <https://rsms.me/inter/>`__ 字形,然後啟用了 Slashed Zero OpenType 功能(底部):

../../_images/using_fonts_font_variation_slashed_zero.webp

OpenType 功能比較(Inter)

您可以透過新增 OpenType 功能來停用特定字形的連字和/或字距調整,然後在檢視器中取消選取它們:

../../_images/using_fonts_font_variation_disable_ligatures.webp

禁用字形的合字和字偶距

系統字形

警告

只有 Windows、macOS、Linux、Android、iOS 支援載入系統字形。

However, loading system fonts on Android is unreliable as there is no official API for doing so. Godot has to rely on parsing system configuration files, which can be modified by third-party Android vendors. This may result in non-functional system font loading.

與匯入的字形相比,系統字形是一種不同型別的資源。它們實際上從未匯入到專案中,而是在運作時加載。這樣做有兩個好處:

  • 字形不包含在匯出的 PCK 檔案中,導致匯出專案的檔案大小較小。

  • 由於匯出的專案中不包含字形,因此可以避免在專有系統字形與專案一起分發時可能出現的許可問題。

引擎會自動使用系統字形作為後備字形,這使得無需加載自訂字形即可顯示 CJK 字元和表情符號。但有一些限制適用,如 使用表情符號 部分所述。

Create a SystemFont resource in the location where you desire to use the system font:

../../_images/using_fonts_system_font_create.webp

建立自己的資源

../../_images/using_fonts_system_font_specify.webp

指定要在 SystemFont 資源中使用的字型名稱

你可以明確的指定若干字形名稱(例如 Arial),也可以指定字形的*別名*,後者會對應到系統中的“標準”預設字形:

前視圖

Windows

macOS

Linux

Android

sans-serif

Arial

Helvetica

由 fontconfig 處理

Roboto / Noto Sans

serif

Times New Roman

時間戳

由 fontconfig 處理

Noto Serif

等寬字形

Courier New

Courier

由 fontconfig 處理

Droid Sans Mono

cursive

Comic Sans MS

套用更改。

由 fontconfig 處理

Main(主要)腳本

if x else

Gabriola

Papyrus

由 fontconfig 處理

Droid Sans Mono

在 Android 上,Roboto 用於拉丁文/西里爾文文字,Noto Sans 用於其他語言的字形,例如 CJK。在第三方 Android 發行版上,確切的字形選擇可能有所不同。

如果指定多個字形,則將使用系統上找到的第一個字形(從上到下)。字形名稱和別名在所有平台上都不區分大小寫。

與字形變體一樣,您可以將 SystemFont 排列儲存到資源檔案中,以便在其他地方重複使用它。

請記住,不同的系統字形具有不同的規格,這意味著在一個平台上可以容納在矩形內的文字可能無法在另一個平台上容納。在開發過程中始終保留一些額外的空間,以便標籤可以在需要時進一步延伸。

備註

與 Windows 和 macOS/iOS 不同,Linux 上提供的預設字型集取決於發行版。這意味著在不同的 Linux 發行版上,給定的系統字形名稱或別名可能會顯示不同的字形。

It is also possible to load fonts at runtime even if they aren't installed on the system. See Runtime loading and saving for details.

渲染

當使用傳統的光柵化字形時,Godot 根據每個字形和每個尺寸快取字形。這可以減少卡頓,但在運作專案時第一次顯示字形時,卡頓仍然可能發生。這在較大的字形大小或行動裝置上尤其明顯。

使用 MSDF 字形時,只需將它們光柵化為特殊的帶符號距離場紋理一次。這意味著快取可以純粹基於每個字形來完成,而不考慮字形大小。然而,與中等尺寸的傳統光柵化字形相比,MSDF 字形的初始渲染速度較慢。

為了避免與字形渲染相關的口吃問題,可以「預先渲染」某些字形。可以對您打算使用的所有字形執行此操作(以獲得最佳結果),或者僅對最有可能在遊戲過程中出現的常見字形執行此操作(以減小檔案大小)。未預先渲染的字形將像往常一樣即時光柵化。

備註

在這兩種情況(傳統和 MSDF)中,字形光柵化都是在 CPU 上完成的。這意味著 GPU 效能不會影響字形光柵化所需的時間。

雙擊檔案系統停靠列中的字型檔案,開啟「進階匯入設定」對話框。您也可以在檔案系統底座中選擇字形,前往匯入底座,然後選擇底部的**進階...**:

../../_images/using_fonts_advanced_import_settings.webp

匯入流程

移至「進階匯入設定」對話方塊的 預先渲染配置 分頁,然後透過點選「加號」符號新增配置:

在「進階匯入設定」對話方塊中新增新的預渲染配置

在「進階匯入設定」對話方塊中新增新的預渲染配置

新增配置後,請確保透過單擊其名稱一次來選擇它。您也可以透過雙擊配置來重新命名它。

有兩種方法可以將要預先渲染的字形新增到給定配置。可以以累積的方式使用這兩種方法:

使用 Weblate 來進行翻譯

對於大多數專案來說,這種方法使用起來最方便,因為它會自動從您的語言翻譯中取得文字。缺點是它只能在您的專案支援 國際化 時使用。否則,請堅持使用下面描述的“使用自訂文字”方法。

將翻譯新增至專案設定後,使用「翻譯」標籤中的「字形」透過雙擊來檢查翻譯,然後點擊底部的「**調整翻譯中的所有字串並新增字形」:

在「進階匯入設定」對話方塊中使用「翻譯」標籤中的字形啟用預先渲染

使用「翻譯」標籤中的 **Glyphs 在「進階匯入設定」對話方塊中啟用預渲染

備註

更新翻譯時,預渲染字形列表不會自動更新,因此如果您的翻譯發生重大更改,您需要重複此過程。

使用自定節點

雖然它需要手動指定遊戲中出現的文字,但對於不支援使用者文字輸入的遊戲來說,這是最有效的方法。對於行動遊戲來說,這種方法值得探索,以減少分散式應用程式的檔案大小。

若要使用現有文字作為預先渲染的基線,請前往「進階匯入設定」對話方塊的「文字中的字形」子分頁,在右側視窗中輸入文字,然後按一下「塑造文字形狀並新增字形”* * 在對話框底部:

在「進階匯入設定」對話方塊、「文字」標籤中的「字形」中啟用預渲染

使用「文字中的字形」標籤在「進階匯入設定」對話方塊中啟用預先渲染

小訣竅

如果您的專案支援國際化<doc_internationalizing_games>`,您可以將CSV 或PO 檔案的內容貼到上面的方塊中,以快速預渲染遊戲過程中可能渲染的所有可能的字元(不包括使用者提供的或不可翻譯的字元)字串)。

通過啟用字元集

如果您的遊戲文字發生變化,第二種方法需要較少的配置和較少的更新,並且更適合文字較多的遊戲或具有聊天功能的多人遊戲。另一方面,它可能會導致遊戲中從未出現的字形被預先渲染,這在檔案大小方面效率較低。

To use existing text as a baseline for prerendering, go to the Glyphs from the Character Map sub-tab of the Advanced Import Settings dialog, then double-click character sets to be enabled on the right:

在「進階匯入設定」對話方塊、「字元對應表」標籤中的「字形」中啟用預先渲染

使用「字元對映表中的字形」標籤在「進階匯入設定」對話方塊中啟用預渲染

為了確保完全預先渲染,您需要啟用的字元集取決於您的遊戲支援的語言。對於英語,僅需要啟用**基本拉丁語**。啟用 Latin-1 Supplement 還可以完全涵蓋更多語言,例如法語、德語和西班牙語。對於俄語,需要啟用**西里爾**,等等。

存取區域變數或屬性:

在高級“專案設定”的 **GUI > 主題**部分中,可以對預設字形的渲染方式進行選擇:

  • 預設字形抗鋸齒: 控制用於預設專案字形的 抗鋸齒 方法。

  • 預設字形提示: 控制用於預設專案字形的:ref:提示 <doc_using_fonts_hinting> 方法。

  • 預設字形子像素定位: 控制預設專案字形的:ref:子像素定位 <doc_using_fonts_subpixel_positioning> 方法。

  • 預設字形多通道有符號距離場: 如果“true”,則使預設專案字形使用:ref:MSDF 字形渲染 <doc_using_fonts_msdf> 而不是傳統的光柵化。

  • 預設字型產生 Mipmap: 如果為“true”,則啟用:ref:mipmap <doc_using_fonts_mipmaps> 產生和使用預設專案字型。

備註

這些專案設定*僅*影響預設專案字形(在引擎二進位檔案中硬編碼的字形)。

自訂字形的屬性由其各自的匯入選項控制。您可以使用「專案設定」對話方塊的「匯入預設值」部分來覆寫自訂字形的預設匯入選項。