鋼鐵雄心4 GUI教程 P1創建一個新的界面

前言

在鋼4mod製作中,稍微進階的製作當屬ui製作,其中既包含了原版中本來存在的一些頁面修改,也包括新加的Scripted Gui。

在一些大型mod中,gui的大量修改可以讓mod變得更「酷炫」(沒錯就是指TNO

然而無論是原版還是wiki可能對於scripted gui的教程都略顯簡陋,不易理解,甚至部分內容沒有相關說明(gridbox,scrollbar等等),加之其製作難度略大(需要大量運用變數,數組),讓GUI修改成為鋼4mod製作的一大難題

那麼本教程將對鋼4mod中有關GUI的內容進行說明,這將會是一個大坑,以及受限於當前資料,有些內容可能無法完全涉及或者有錯漏,還請海涵!

觀前提示,gui製作可能會涉及大量variable,array,meta_effect,flag,event_target的操作,如有不適請立刻打開wiki!

1.了解鋼4GUI原理

請允許我借用正經編程的術語,鋼4的UI大致分為兩部分,一部分是「前端」,用於創建圖像文本界面;另一部分是「後端」用於鏈接和執行相關的UI互動。

對於絕大部分游戲原版ui來說,「後端」代碼無法觸及,只能進行「前端」修改,如更改圖像位置,插入新圖像/文本框之類

TBE的國家選擇界面

但是對於scripted gui(新加自定義界面)就可以進行相應的「後端」編輯,令它可以完成相應的效果

GIF AOR測試的國聯界面

不難看出,UI本質就是圖像操作於游戲內容的交互,以玩家為媒介,溝通起一條鏈接游戲圖像文件和代碼分配的橋梁

因此,UI與美工深度綁定,好比布料和裁縫,好的裁縫(代碼)需要有豐富精良的布料(美工)才能製作出一件完美的藝術品

所以開始ui製作之前,你得找到一個好美工

2.ui文件構成

首先是「前端」文件,在游戲文件夾目錄下

gfx文件夾中儲存了游戲會調用的圖像素材,在原版中,絕大部分圖像以dds格式儲存,但是,也可以使用png格式,二者互有優劣,對於dds文件,其能儲存通道信息,游戲自帶的圖像處理器可以依靠他進行渲染;對於png文件,其能保存透明部分,同時便於使用

interface文件夾中,儲存了鋼4GUI的「前端」代碼(後綴為.gui),以及gfx圖像的注冊文件(後綴為.gfx),因此在使用新加圖像文件時,請一定要記得在游戲中注冊

然後是「後端」文件,位於common文件夾中

通常而言,scripted_gui文件本身就可以單獨完成相關的ui「後端」編輯,但是如果需要相對複雜的ui編寫,其餘內容必不可少

後續會在使用到的時候進行相關介紹

3.創建一個新的ui界面

了解了基本的gui構成,讓我們實踐一下,創建一個自己的新頁面

以mod開局介紹界面為例

首先讓我們打開ps,構思一下這個界面會是什麼樣子的,以下借用kr的開局介紹圖像素材

(才不是因為我不會美工

可以看到,我打算製作的新ui分為四個部分,一個背景,一個圖像,一個按鈕,一個文本框,那麼接下來我需要把這個界面用游戲的代碼表達出來

第一步,注冊相關圖像文件

第二步,編輯前端文件

首先新建一個.gui文件(你可以選擇復制一個原版的並且將它清空)

接下來我們需要創建一個「窗口」,containerWindowType,它是鋼絲最普遍的一種窗口,所有「元件」(圖像,文本,按鈕)都必須儲存在一個容器之中。

創建之前我們先回到之前ps的頁面,確定一下我們需要多大的窗口(依據背景圖像),要讓他出現在哪裡(畫面正中心)於是有:

orientation:窗口相對於屏幕的方位,默認情況以屏幕左上角為原點,x以右為正方向,y以下為正方向。center則將相對方位的原點改為屏幕中心為原點(相較於原來的位置,在1920x1080解析度下,position為:x = 960 y = 540)

兩圖為position x =0 y=0時,不同的orientation

origo:窗口的基準點,position的x,y值即為基準點的位置,默認為整個窗口的右上角,center則將窗口基準點定為整個窗口的中心點

兩圖為相同position,相同orientation,不同origo

moveable:窗口可以拖動

clipping:是否會裁剪超框的圖像/文本框

然後,我們需要往裡添加元件,參考我們在ps里的設計,一個logo,一個按鈕,一個文本框

p社gui元件堆疊方式與圖層相同,從下往上堆積,寫在下方的元件會疊在寫在上方的元件,窗口的背景永遠位於最下方

所以我們這樣寫

這三個元件分別為:按鈕(buttonType),文本框(instantTextBoxType),圖標(iconType),體現在ps圖層大概是這樣的

注意,元件中position的位置則是以整個窗口的左上角為原點,元件的左上角為基準點,根據x,y來排布

name為每個元件名稱,orientation為元件相對於窗口的位置,spriteType為引用的圖像文件(先前注冊過的)

每項元件都有一些自己的設置,但不是本次的重點,這部分詳解將會在後續的文章中列出

以上,前端頁面的創建就完成了。

第三步,編輯後端文件

在common/scripted_gui中新建一個文件

我們先需要將前端界面與後端代碼進行關聯

context_type定義了前端窗口類型:玩家窗口(player_context),默認作用域(scope)會設置為這個界面所展現給的tag

window_name則指向這個後端代碼所對應的前端窗口,還記得它嗎

我們需要讓歡迎窗口在開始游戲時顯示,點擊按鈕時關閉,於是選擇country_flag作為檢測條件(trigger)

目前的代碼將會把這個歡迎窗口呈現給擁有flag為welcome的國家,點擊按鈕的時候會清空flag然後讓窗口消失,接下來配合on_action將這個flag在游戲開始時設置

最後用debug模式進入游戲測試

可以看見我們成果創建界面了

但是裡面元件卻凌亂的一塌糊塗,用控制台指令gui,滑鼠指針移動到元件上方,修改x,y值令它排布出我們需要的樣子

最後進行文本內容的本地化並且為按鈕加上一個文本

創建一個新的界面,大功告成

GIF

寫在後面,UI的製作不是一件一蹴而就的事情,這需要你有足夠的耐心和充足的代碼積累,對你的美工也是一個不小的考驗,希望我的教程能給予打算嘗試或者正在製作的modder一點微不足道的幫助

同時鳴謝@CleverCrafty 大佬給予我的不小幫助讓我可以開這個史詩級巨坑

希望能填完吧

隨便看看 更多