文章目錄
- 一制作單條死亡信息框
- 水平框的使用
- 創建一個水平框
- 添加子元素
- 調整子元素順序
- 子元素的布局插槽
- 尺寸
- 填充
- 對齊
- 制作UI
- 根據隊伍,設置文本的名字和顏色
- 聲明變量
- 將變量設置為構造參數
- 根據隊伍,設置文本的名字和顏色
- 在構造事件中,獲取玩家的引用,設置擊殺者和被殺者的文本和顏色,設置武器圖標
- 二創建一個容器,讓死亡信息自動排序
- 創建KillInfoPanel藍圖,用來展示擊殺信息
- 編輯變量和方法
- 把KillInfoPanel放到主UI藍圖Fpp_UI里
- 三公共函數庫生成隨機的名字
- 四使用GameMode的事件分發器,來處理死亡消息
- 創建GameMode的事件分發器
- 修改死亡方法,發出擊殺消息
- UI注冊消息
一制作單條死亡信息框
水平框的使用
類似于Unity的horizontalLayout
創建一個水平框
需要先有一個畫布組件
在面板里拖一個水平框出來
添加子元素
往里邊拖入三個text
調整子元素順序
點擊子元素,使用箭頭調整
子元素的布局插槽
尺寸
自動:根據元素內容自動控制大小
填充:填滿整個水平框
后邊會出現一個比例,它并不是填充多少,只有有多個填充模式的子元素時,他用來表示相對于其他元素,這個元素大多少倍,例如兩個填充元素,設置為2和1,則第一個元素占2/3,第二個元素占1/3
填充
其實是邊距
直接輸入可以同時調四個邊距
展開可以分別調整四個邊距
對齊
這個元素在自己的槽位里的對齊方式,不是內部文本的對齊方式
圖中為水平豎直都拉伸到最大,如果元素時圖片,拉伸模式會破壞圖片的比例
制作UI
新建一個UI藍圖,命名為WhoKillWho
新建一個尺寸框,在尺寸框下新建一個水平框
選中尺寸框,調整大小
根據隊伍,設置文本的名字和顏色
畫面中的大小沒有變是因為我們在屏幕模式里,舞臺右上角"填充屏幕"模式改成"所需",此時尺寸框變成我們需要的大小
選中水平框,添加兩個文本框和一個圖片,如下調整布局
最左側文本框
中間的圖片
右側的文本框
聲明變量
首先將兩個文本框和一個圖片修改一下名字,分別命名為KillerText,GunImage,KilledText,并設置為變量
然后聲明五個變量 擊殺者的名字和隊伍,被殺者的名字和隊伍,使用的武器
將變量設置為構造參數
首先UI藍圖沒有構造函數,所謂構造參數是指別人調用“Create Widget”節點時,可以輸入的參數
我們要把手動創建的五個參數設置為構造參數,只能一個一個設置,不能批量設置
選擇一個參數,在他的變量欄里,選擇可編輯實例和生成時公開
根據隊伍,設置文本的名字和顏色
編寫一個方法,這里編寫了一個事件,是一樣的
在構造事件中,獲取玩家的引用,設置擊殺者和被殺者的文本和顏色,設置武器圖標
注意是構造事件,不是構造函數
二創建一個容器,讓死亡信息自動排序
創建KillInfoPanel藍圖,用來展示擊殺信息
教程里沒有用VerticalBox,說是不能讓新加入的顯示到上變,改用統一網格面板
新建一個UI藍圖,改名為KillInfoPanel
添加一個"統一網格面板",重命名為Panel,指定是變量,不需要修改尺寸,因為這個我們要作為自定義UI放到Fpp_UI面板里
編輯變量和方法
變量:
Panel是UI設計面板傳過來的統一網格
Slots,數據類型為統一網格插槽,用來管理子項的行列
ChildArray數組,類型為WhoKillWho這個UI的示例,他和Slot的意義不一樣,它是用來調用自己的"從父項中移除"節點來刪除自己的
MaxNum:統一網格里最多幾條數據,設置默認值為3
方法:
三個方法,AddKillInfo用于添加一個新的擊殺消息,ResetIndex用于對子元素重新排序,確保新加入的信息顯示在最上,CheckMaxNum用于確保最多只有三條信息
把KillInfoPanel放到主UI藍圖Fpp_UI里
在用戶創建里直接把自己創建的KillInfoPanel拖進來
調整錨點,對齊方式和大小到內容
對齊方式一定要對,確保尺寸擴展時會向左擴展
大小到內容一定要勾選,否則兩項之間有空隙
三公共函數庫生成隨機的名字
首先在Shooter里創建一個Name變量
公共函數庫可以理解為靜態函數,可以不需要引用直接調用
先創建一個函數庫藍圖,取名為Utility
創建兩個一個函數和兩個數組,數組里是名字和姓氏
函數內容就是隨機獲取數組里的值,然后返回拼接的字符串
四使用GameMode的事件分發器,來處理死亡消息
創建GameMode的事件分發器
死亡消息的分發器不能放在shooter藍圖里,否則每創建一個角色,UI就要獲取一次引用
正確的做法是放到GameMode里
在GameMode里新建一個事件分發器,命名為Kill_Dispatcher,添加五個參數,殺人者的名字和隊伍,被殺者的名字和隊伍,使用的武器
修改死亡方法,發出擊殺消息
在shooter的Die函數里調用這個事件分發器
需要注意,這里為了獲取到擊殺者的信息,為Die函數添加了一個Shooter類型的輸入參數Enemey
然后為了給Die的Enemy函數賦值,要在TakeDamage里也添加一個Shooter類型的Enemy
然后為了給TakeDamage函數的Enemy參數賦值,需要修改步槍和發射器子彈的函數
步槍:
發射器的bullet:
添加一個Shooter參數,記錄這個子彈的主人,TakeDamage時傳入
在launcher的shootOnce方法里,創建子彈是,將GunOwner傳入
UI注冊消息
在Fpp_UI的事件圖表里注冊擊殺消息,調用KillInfoList的Add方法添加一個新的消息
這里的自定義事件比較復雜,可以直接從“綁定事件到KillDispatcher”節點拖一個線出來,自動創建帶有正確輸入參數的事件