案例地址:https://www.unrealengine.com/marketplace/zh-CN/product/simple-menu-ui
這個Demo簡單,基本結(jié)構(gòu)都有,可以用來入手學(xué)習(xí)
1. UE5 入口
1) 先查看 Project-Maps&Modes,找到默認啟動Map、GameMode與GameInstance;此外,Input設(shè)置也需要看下。
2)當UE5程序啟動時,默認啟動GameInstance、GameMode與默認Map;
- 接著,Map里的LevelBlueprint程序會默認運行;并且Map的WorldSettings里,綁定的Pawn、HUD、PlayerController…也會被調(diào)用運行。
- 另外,GameMode程序會啟動,并運行綁定的Pawn、HUD、PlayerController…(一般選擇Map或GameMode一處地方來綁定)。
- SimpleMenuUIv3的入口有2處,Level_MainMenu的LevelBlueprint,和Blueprint_GameInstance;
GameInstance、GameMode、PlayerController說明:
- GameInstance是設(shè)置全局變量或函數(shù),跨越所有GameMode等,理解為最高層;
- GameMode是設(shè)置某一個Map或某一個游戲模式下的變量或函數(shù),跨域這個模式下所有角色腳本;
- PlayerController是角色腳本,因為游戲主角非常重要,并基于面向?qū)ο笏季S。類似這些腳本里,往往寫有非常多此對象的函數(shù)與變量。
- GameInstance->GameMode->PlayerController形成層層管理的結(jié)構(gòu)。
總結(jié):
- UE5入口需要查看GameInstance(自定義)、GameMode(自定義)、LevelBlueprint、和找到自定義的Pawn、HUD、PlayerController等;
- UE5的編程思維是面向?qū)ο笏季S,其他Actor對象一般是等待入口程序調(diào)用或其他事件調(diào)用。
2. 藍圖開始 LevelBlueprint
- 案例把UMG的操作寫在GameInstance里,這里獲取GameInstance,并啟動LoadSettings與ShowOpeningWidget 2個事件。
3. 全局藍圖 Blueprint_GameInstance - UI Open (UI打開/開始)
1)打開UI幾個關(guān)鍵點:判斷是否建立Widget、Create Widget創(chuàng)建UI、AddToViewport加入視口、Show Mouse Cursor設(shè)置鼠標是否顯示、Set Input Mode … 設(shè)置輸入模式。
2) Show Opening Widget 打開首頁面
- 根據(jù)Bool值判斷是顯示Start待機頁面還是MainMenu主菜單頁面
3)Show Start Screen 打開待機頁面
- 如果StartScreen為空,Create Widget并保存,-> Add to Viewport -> Show Mouse Cursor -> 設(shè)置bool值;這幾步都是UMG的常規(guī)操作
- bool值來改變是進入按Enter的StartScreen待機頁,還是直接進入MainMenu主菜單頁
4)Show Main Menu 顯示主菜單頁
- Set Input Mode 有3類,UI Only、Game Only、Game And UI;對應(yīng)是只能控制UI界面、只能控制游戲界面和2者都能控制。
4. 開始頁面 Widget_StartScreen
- 開始待機頁面,按enter進入菜單頁
- Widget Graph
1)Animation :
- 播放UI動畫,Widget里設(shè)置了FadeLoop的呼吸燈動畫,可以使用動畫控制進行調(diào)試
- 需要加入Graph里才能進行播放:
2)Input Action : 按下Enter提供相應(yīng)
- Listen for Input Action是為UMG準備的輸入相應(yīng),測試用InputAction Enter也是可以實現(xiàn),不過此節(jié)點提供更多功能,Consume Bool值可以控制是否Callback有效。
如下響應(yīng)Enter是有效的
3)父類:BaseWidget_AnimatedCanvas
- 本案例所有的UI進入和退出都有一個簡單動畫,所以把功能抽象到這個父類里。包括Animate_Out與Animate_In 2個動畫
- 如何調(diào)用:
- 在此Widget第1次創(chuàng)建的時候,同時調(diào)用父類的Construct
- 如何頁面退出:
- 調(diào)用父節(jié)點的Remove Widget事件,然后再調(diào)用Instance的Show Main Menu的事件,父節(jié)點的Remove Widget事件:
- 先播放Animate Out動畫,然后在動畫完成事件回調(diào)后,Remove from Parent
Remove from Parent節(jié)點:把本widget從它的UI層上的父節(jié)點里刪除,簡單說,就是刪除頁面。
不會刪除Create Widget的對象,只需要Add to Viewport即可顯示出來。
4)Call Remove from Parent:
在Animation Finished里,有一個Event Dispatchers事件調(diào)用“Remove from Parent”
Call 呼叫,觸發(fā)綁定事件。但是這里沒有發(fā)現(xiàn)Bind來相應(yīng)Call,故而似乎沒有效果。若有這樣一段程序,即可響應(yīng)Call。
5. 主頁面 Widget_MainMenu
- 主菜單頁面
1)Text綁定Game Instance數(shù)據(jù)
- 頁面Text通過Bind綁定數(shù)據(jù),數(shù)據(jù)來自Game Instance -> GameInfo -> * ,結(jié)構(gòu)體Struct_GameInfo
2)WidgeClass_Button 按鈕類(預(yù)制體)
-
MainMenu里按鈕,使用WidgeClass_Button類
-
建立按鈕文本、2種顏色的變量,在MainMenu暴露,可進行設(shè)置
-
按鈕動畫, 建立TextHover動畫(放大),通過Play Animation Forward與Reverse進行播放(放大縮?。?,并設(shè)置文本顏色
-
默認設(shè)置
-
動畫設(shè)置
通過事件調(diào)度器,觸發(fā)Call On Click自定義事件
文章來源:http://www.zghlxwxcb.cn/news/detail-735219.html
- 自此,按鈕的文本等設(shè)置,動畫設(shè)置與按下事件接口都有了。
3)Call On Click 按鈕點擊回調(diào)
- 在Widget_MainMenu Graph里,建立Game Instance變量,綁定Event to On Click;
- 回調(diào)綁定,Remove Widget,然后運行Game Instance里的Show Singleplayer Menu事件
總結(jié):UI簡單使用邏輯,先到這里,祝福大家開發(fā)一切順利~文章來源地址http://www.zghlxwxcb.cn/news/detail-735219.html
到了這里,關(guān)于UE5【UMG】 - Simple Menu UI v3 學(xué)習(xí)筆記的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!