虛幻4初級(jí) 簡(jiǎn)單的仿絕地求生背包系統(tǒng)(網(wǎng)絡(luò),UMG,藍(lán)圖接口)

Demo下載

先拋開(kāi)UI部分暫且不論琅坡,需要什么:
  • 在世界中存在的能夠被拾取的Actor
  • 角色能夠知道附近有哪些Actor能夠被拾取
  • 存儲(chǔ)已拾取的忧勿,裝進(jìn)背包的Actor
  • 能夠?qū)⒈嘲械牡腁ctor扔出去
  1. 使用Interface標(biāo)記Actor將能實(shí)現(xiàn)最靈活的配置阀蒂,
    新建一個(gè)藍(lán)圖接口命名為PickupInterface。



    添加兩個(gè)函數(shù)分別是【Pickup】【Discard】
    Pickup函數(shù)輸入值新建一個(gè)PlayerController袭厂,輸出則為一個(gè)布爾值计济,判斷是否成功拾取


    Pickup函數(shù)

    Discard則只需要一個(gè)為布爾變量的輸出值,作用也是判斷是否成功丟掉
    Discard
  2. 在角色藍(lán)圖中創(chuàng)建一個(gè)碰撞組件用于檢測(cè)實(shí)現(xiàn)了PickupInterface接口的Actor
    我這里使用的是Box碰撞體各吨。


    Collision

    將它的碰撞預(yù)設(shè)改為OverlapAllDynamic枝笨,并添加兩個(gè)事件


    CheckPickupCollision

    在角色藍(lán)圖中新建一個(gè)Actor數(shù)組變量,這個(gè)值不需要同步揭蜒,用于存儲(chǔ)附近的實(shí)現(xiàn)了PickupInterface接口的Actor横浑。
    添加兩個(gè)自定義事件,檢測(cè)傳入的Actor值是否實(shí)現(xiàn)了PickupInterface接口屉更。
    Nearby

    在BoxCollision的Begin Overlap和End Overlap事件中分別使用:


    BoxCollision
  3. 已拾取的Actor徙融,背包中的Actor存儲(chǔ)使用PlayerState來(lái)實(shí)現(xiàn)。


    PlayerState

    創(chuàng)建一個(gè)Actor數(shù)組并將復(fù)制模式設(shè)為Replicated瑰谜,復(fù)制條件設(shè)為OwnerOnly(只在服務(wù)器和所屬客戶端復(fù)制欺冀,可有有效減少網(wǎng)絡(luò)傳輸量树绩,缺點(diǎn)也很明顯,其他客戶端沒(méi)有更新)
    實(shí)現(xiàn)添加Pickup和移除Pickup的函數(shù):



    前綴帶[Server]字樣的函數(shù)是RPC函數(shù)隐轩,他們的復(fù)制屬性為在服務(wù)器上運(yùn)行并設(shè)為可靠函數(shù)(網(wǎng)絡(luò)的傳輸非常多樣化饺饭,可靠傳輸意味著一定會(huì)執(zhí)行,但相較于不可靠函數(shù)职车,會(huì)損失一定的時(shí)間性能)
    RPC函數(shù)

    代碼層的框架已經(jīng)ok了瘫俊。

分析絕地求生的UI

圖片源自網(wǎng)絡(luò)

我們能夠顯而易見(jiàn)的分成三部分(背包與附近裝備列表[左],角色的實(shí)時(shí)顯示[中]悴灵,武器裝備[右])
這篇教程就先實(shí)現(xiàn)左邊的扛芽。
我們?cè)侔炎筮吔o拆開(kāi)分析



綠框中的是顯示背包容積的進(jìn)度條[Progress Bar]
紅框中的是兩個(gè)能夠滑動(dòng)的控件[Scroll Box]
我們可以把紅框中顯示裝備列表給封裝起來(lái),封裝的目的是可復(fù)用性积瞒,其使用方法就跟我們使用普通的小控件如滑動(dòng)條川尖,還可以在游戲中動(dòng)態(tài)的創(chuàng)建控件。
列表中都是由一個(gè)個(gè)這個(gè)封裝起來(lái)的


item

而item又分為三部分茫孔,分別是左邊的圖片叮喳,中間的名字,右邊的數(shù)量银酬,如果為不可以合并的裝備則會(huì)隱藏掉。

最小控件Item的制作 [ActionItem]

item

由上圖分析出控件的排列為左右結(jié)構(gòu)筐钟,我們可以使用[Horizontal Box] (Panel Widget:不會(huì)渲染出來(lái)揩瞪,用于對(duì) Child Widget 進(jìn)行布局)。左右空間還有不同的不透明度篓冲,使用[Border]李破。具體的文字圖片為[Text][Image]
關(guān)于細(xì)節(jié):

  • 窗口尺寸變成長(zhǎng)條形,其目的僅僅是方便顯示我們能夠直觀看出效果
  • 中間用于顯示名字的控件將使用填充作為父控件的計(jì)算方式
  • 啟用[Text]AutoWrapText自動(dòng)換行壹将,垂直居中
  • 子控件的Padding默認(rèn)為(4,2)嗤攻,如有必要請(qǐng)歸零
  • 打開(kāi)子控件的Is Varible


    外觀

    層次結(jié)構(gòu)

    每個(gè)控件的具體參數(shù)下載示例查看。
    觀察上圖诽俯,我們需要幾個(gè)參數(shù):

  • Image 顯示的圖標(biāo)
  • Name 子項(xiàng)的名字
    創(chuàng)建一個(gè)結(jié)構(gòu)體方便傳遞和使用


    ActionItemInfo

    參數(shù)

    回到PickupInterface添加一個(gè)函數(shù)【GetActionInfo】



    在ActionItem中添加PickupActor的引用并在生成時(shí)顯示:
    ActionItem

    在其構(gòu)造事件中:
    ActionItem

拖拽

在ActionItem中實(shí)現(xiàn)拖拽的檢測(cè)和創(chuàng)建拖拽時(shí)使用的對(duì)象
需要覆寫(xiě)如下2個(gè)函數(shù)分別實(shí)現(xiàn)檢測(cè)和創(chuàng)建【OnMouseButtonDown】【OnDragDetected】


覆寫(xiě)函數(shù)

OnMouseButtonDown檢測(cè)是否有拖拽事件

檢測(cè)到拖拽事件后如何處理妇菱,這里是直接把自己傳進(jìn)去

列表的創(chuàng)建

由于我們需要在列表中覆寫(xiě)OnDrop事件,但是[附近的]與[背包中的]它們的OnDrop處理事件是不同的暴区,所以我要分開(kāi)來(lái)寫(xiě)闯团。

InventoryList
層次結(jié)構(gòu),其中ScrollBox的子項(xiàng)是需要?jiǎng)討B(tài)創(chuàng)建的仙粱,我在這兒拖進(jìn)去只是演示效果

效果預(yù)覽

藍(lán)圖方面創(chuàng)建一個(gè)更新列表的函數(shù)房交,也只需要這一個(gè)函數(shù),因?yàn)榱斜淼墓芾聿皇怯蒞idget進(jìn)行管理的伐割,Widget僅僅是起到一個(gè)通知(給玩家)的作用:



InventoryList與NearbyList都是有如上部分的候味,唯一的不同就是OnDrop的處理刃唤,在InventoryList是添加進(jìn)庫(kù)存,而在NearbyList中是移除:

我們先在MyCharacter中添加如下兩個(gè)函數(shù):


MyCharacter

回到InventoryList白群,覆寫(xiě)OnDrap:
InventoryList

之后復(fù)制一份InventoryList重命名為【NearbyList】尚胞,修改OnDrap:
NearbyList

MainInventoryWidget的制作:

層次結(jié)構(gòu)

效果

封裝接口,簡(jiǎn)化調(diào)用

在MyCharacter中顯示背包

對(duì)背包的Widget進(jìn)行賦值

背包的顯示與關(guān)閉

UI更新的通知

并在MyPlayerState中使用通知接口:


MtCharacter

MyPlayerState中使用宏川抡,宏的定義如下

通知更新的宏

使用示例

創(chuàng)建一個(gè)Actor辐真,重命名為PickupActor,啟用復(fù)制和復(fù)制移動(dòng)屬性崖堤,并添加一個(gè)StaticMesh (把mesh隨便設(shè)置一個(gè)侍咱,我設(shè)置的是cube),



打開(kāi)類設(shè)置并實(shí)現(xiàn)接口PickupInterface


image.png

創(chuàng)建一個(gè)自定義事件密幔,并設(shè)置復(fù)制為多路傳送楔脯,啟用可靠函數(shù):

實(shí)現(xiàn)接口的函數(shù):


接口函數(shù)




接下來(lái)你就可以拖進(jìn)場(chǎng)景使用了,
還有很多細(xì)節(jié)未修復(fù)胯甩,比如釋放actor值的位置昧廷,應(yīng)該是放在地板上。等等
也有很多的功能尚未實(shí)現(xiàn)(比如網(wǎng)絡(luò)延遲情況下的處理偎箫,類似于子彈多個(gè)數(shù)據(jù)的打包)木柬,我會(huì)在接下來(lái)的教程一一完善

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市淹办,隨后出現(xiàn)的幾起案子眉枕,更是在濱河造成了極大的恐慌,老刑警劉巖怜森,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件速挑,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡副硅,警方通過(guò)查閱死者的電腦和手機(jī)姥宝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)恐疲,“玉大人腊满,你說(shuō)我怎么就攤上這事∨嗉海” “怎么了糜烹?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)漱凝。 經(jīng)常有香客問(wèn)我疮蹦,道長(zhǎng),這世上最難降的妖魔是什么茸炒? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任愕乎,我火速辦了婚禮阵苇,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘感论。我一直安慰自己绅项,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布比肄。 她就那樣靜靜地躺著快耿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪芳绩。 梳的紋絲不亂的頭發(fā)上掀亥,一...
    開(kāi)封第一講書(shū)人閱讀 51,708評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音妥色,去河邊找鬼搪花。 笑死,一個(gè)胖子當(dāng)著我的面吹牛嘹害,可吹牛的內(nèi)容都是我干的撮竿。 我是一名探鬼主播,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼笔呀,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼幢踏!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起许师,我...
    開(kāi)封第一講書(shū)人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤房蝉,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后枯跑,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體惨驶,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡白热,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年敛助,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片屋确。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡纳击,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出攻臀,到底是詐尸還是另有隱情焕数,我是刑警寧澤,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布刨啸,位于F島的核電站堡赔,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏设联。R本人自食惡果不足惜善已,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一灼捂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧换团,春花似錦悉稠、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至想虎,卻和暖如春卦尊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背磷醋。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工猫牡, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人邓线。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓淌友,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親骇陈。 傳聞我的和親對(duì)象是個(gè)殘疾皇子震庭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 1、通過(guò)CocoaPods安裝項(xiàng)目名稱項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請(qǐng)求組件 FMDB本地?cái)?shù)據(jù)庫(kù)組件 SD...
    陽(yáng)明先生_X自主閱讀 15,982評(píng)論 3 119
  • (一) 是的 我又夢(mèng)見(jiàn)你了你雌。 醒來(lái)后夢(mèng)里的情節(jié)多半都忘了 唯一清晰的就只有久違的你的臉——當(dāng)時(shí)怎么就沒(méi)覺(jué)著你這么好...
    李霖不語(yǔ)閱讀 615評(píng)論 0 0
  • 讀書(shū)的好處那是不必多言了婿崭,但是你有沒(méi)有這么一種感覺(jué):我明明有在讀書(shū)拨拓,卻沒(méi)什么收獲呀。這時(shí)你不防反思一下自己有沒(méi)有讀...
    每天慌閱讀 211評(píng)論 2 1
  • 好多人也不滿足,也想成長(zhǎng)授瘦,但他們堅(jiān)持不下去醋界。遇到痛苦、困難提完、否定和打擊時(shí)形纺,就開(kāi)始懷疑自己,漸漸變得懶惰徒欣、放縱逐样,最后...
    陽(yáng)焱焱閱讀 596評(píng)論 0 1