原文:Unreal Engine 4 Blueprints Tutorial
作者:Tommy Tran
譯者:Shuchang Liu
在本篇教程里,你將學(xué)會(huì)如何用藍(lán)圖系統(tǒng)創(chuàng)建玩家角色根资,設(shè)置輸入说莫,并編寫(xiě)角色通過(guò)觸碰乍迄,收集道具的游戲邏輯怪嫌。
藍(lán)圖是Unreal Engine 4的一套可視化腳本系統(tǒng),通過(guò)藍(lán)圖可以快速制作游戲原型捏雌。你不再需要一行行的編寫(xiě)代碼,取而代之的是可視化操作:拖拽節(jié)點(diǎn)唠帝,在UI里設(shè)置節(jié)點(diǎn)參數(shù)屯掖,給節(jié)點(diǎn)進(jìn)行連線。
除了作為一款非常便捷的原型工具襟衰,藍(lán)圖也降低了非開(kāi)發(fā)人員制作游戲邏輯的門(mén)檻贴铜。
在本篇教程,你將使用藍(lán)圖來(lái):
- 設(shè)置垂直視角攝像機(jī)
- 創(chuàng)建具備基本移動(dòng)的玩家控制器角色
- 設(shè)置玩家輸入
- 創(chuàng)建可被角色觸碰并收集的道具
注意:本篇教程假定你已了解Unreal Engine 4的基本操作界面瀑晒。你也應(yīng)該熟悉基本的藍(lán)圖概念绍坝,比如組件和節(jié)點(diǎn)。如果你需要復(fù)習(xí)以上內(nèi)容苔悦,點(diǎn)擊入門(mén)教程轩褐。
注意:本篇教程只是Unreal Engine 4系列教程的其中一篇:
- Part 1:入門(mén)
- Part 2:藍(lán)圖
- Part 3:材質(zhì)
- Part 4:UI
- Part 5:制作簡(jiǎn)單游戲
- Part 6:動(dòng)畫(huà)
- Part 7:音頻
- Part 8:粒子系統(tǒng)
- Part 9:AI
- Part 10:制作簡(jiǎn)單FPS游戲
起步入門(mén)
下載示例項(xiàng)目并解壓。進(jìn)入項(xiàng)目文件夾玖详,雙擊BananaCollector.uproject打開(kāi)項(xiàng)目把介。
注意:如果你看到了項(xiàng)目是由較早的引擎版本創(chuàng)建的提示,這很正常(因?yàn)橐娼?jīng)常更新版本)蟋座。你可以選擇以拷貝副本的形式打開(kāi)拗踢,也可以直接轉(zhuǎn)換項(xiàng)目版本打開(kāi)。
你可以看到以下的場(chǎng)景向臀。我們創(chuàng)建的角色會(huì)在場(chǎng)景內(nèi)移動(dòng)并收集道具巢墅。
為了方便起見(jiàn),我已經(jīng)給項(xiàng)目文件做了文件夾分類券膀,如下圖所示:
你可以點(diǎn)擊紅框處按鈕來(lái)顯示/隱藏側(cè)邊欄列表君纫。
創(chuàng)建玩家
點(diǎn)擊進(jìn)入Content Browser界面的Blueprints文件夾。點(diǎn)擊Add New按鈕并選擇Blueprint Class三娩。
由于玩家需要能夠獲取輸入庵芭,Pawn類比較適合妹懒。在彈出窗口選擇創(chuàng)建Pawn雀监,將其命名為BP_Player。
注意:選擇Character類創(chuàng)建也可以眨唬,它還默認(rèn)引入了移動(dòng)組件会前。不過(guò),既然我們想要自己動(dòng)手實(shí)現(xiàn)移動(dòng)匾竿,Pawn類已經(jīng)足夠了瓦宜。
關(guān)聯(lián)攝像機(jī)
攝像機(jī)是玩家觀察游戲世界的方式。我們要?jiǎng)?chuàng)建一個(gè)垂直視角觀察玩家角色的攝像機(jī)岭妖。
在Content Browser 雙擊BP_Player打開(kāi)藍(lán)圖編輯器临庇。
為了創(chuàng)建攝像機(jī)反璃,在Components面板點(diǎn)擊Add Component并選擇Camera。
為了讓攝像機(jī)視角自頂向下假夺,我們需要先把它放在玩家角色上方淮蜈。選中攝像機(jī)組件,再切換到Viewport頁(yè)簽已卷。
按下W鍵激活移動(dòng)操作桿梧田,將攝像機(jī)移動(dòng)到(-1100, 0, 2000)〔嗾海或者裁眯,你可以在Location字段輸入坐標(biāo)點(diǎn)來(lái)移動(dòng)攝像機(jī)。
如果攝像機(jī)被移出界面外讳癌,按下F鍵就可以重新定位看到攝像機(jī)穿稳。
接著,按下E鍵激活旋轉(zhuǎn)操作桿析桥,將攝像機(jī)沿Y軸旋轉(zhuǎn)-60度司草。
玩家表示
我們用一個(gè)紅色方塊來(lái)表示玩家,所以需要使用Static Mesh組件進(jìn)行展示泡仗。
首先埋虹,在Components面板左鍵點(diǎn)擊空白處取消選中Camera組件。否則娩怎,新加的組件會(huì)成為攝像機(jī)的子節(jié)點(diǎn)搔课。
點(diǎn)擊Add Component并選擇Static Mesh。
為了展示紅色方塊截亦,選擇Static Mesh組件爬泥,隨后在Details頁(yè)簽Static Mesh屬性點(diǎn)擊下拉框,選擇SM_Cube崩瓤。
你在關(guān)卡場(chǎng)景里應(yīng)該就能看到如下畫(huà)面(如果看不到袍啡,你可以在Viewport窗口按下F鍵聚焦畫(huà)面)
現(xiàn)在,是時(shí)候在關(guān)卡里動(dòng)態(tài)生成玩家了却桶。點(diǎn)擊Compile按鈕并回到主編輯器境输。
生成玩家
為了讓玩家能夠控制角色,你需要明確兩件事:
- 玩家所要控制的Pawn類
- 角色應(yīng)該在哪里生成
你可以通過(guò)創(chuàng)建Game Mode類(游戲模式類)來(lái)實(shí)現(xiàn)第一點(diǎn)颖系。
創(chuàng)建游戲模式
游戲模式是一個(gè)類嗅剖,用于控制玩家進(jìn)入游戲的方式。比如嘁扼,在多人游戲里信粮,可以使用游戲模式,決定每個(gè)玩家在哪里生成趁啸。更重要的是强缘,游戲模式?jīng)Q定了玩家使用哪個(gè)角色督惰。
在Content Browser里點(diǎn)擊進(jìn)入Blueprints文件夾。點(diǎn)擊Add New按鈕并選擇Blueprint Class旅掂。
從彈出窗口里選擇Game Mode Base姑丑,并命名為GM_Tutorial。
現(xiàn)在辞友,你需要指定哪個(gè)Pawn作為默認(rèn)類栅哀。雙擊GM_Tutorial打開(kāi)藍(lán)圖編輯器。
留意Details面板的Classes部分称龙。點(diǎn)擊Default Pawn Class屬性的下拉框留拾,并選擇BP_Player。
其次鲫尊,關(guān)卡還需要知道當(dāng)前使用哪個(gè)游戲模式痴柔。你可以在World Settings里指明這一點(diǎn)。點(diǎn)擊Compile并關(guān)閉藍(lán)圖編輯器疫向。
每個(gè)關(guān)卡都有自己的設(shè)置咳蔚。你可以通過(guò)Window\World Settings查看設(shè)置。同樣地搔驼,也可以在Toolbar選擇Settings\World Settings進(jìn)行查看谈火。
Details頁(yè)簽旁邊就會(huì)出現(xiàn)World Settings頁(yè)簽。點(diǎn)擊該頁(yè)簽的GameMode Override字段舌涨,選擇GM_Tutorial糯耍。
現(xiàn)在可以看到Game Mode類已經(jīng)修改成GM_Tutorial。
最后囊嘉,我們還需要指定玩家的生成位置温技。通過(guò)在關(guān)卡里放置Player Start(玩家出生點(diǎn))即可。
放置玩家出生點(diǎn)
在生成玩家的過(guò)程中扭粱,游戲模式會(huì)尋找關(guān)卡中是否有玩家出生點(diǎn)舵鳞。如果有,游戲模式就會(huì)在該點(diǎn)生成玩家琢蛤。
為了放置玩家出生點(diǎn)蜓堕,在Modes面板搜索Player Start。左鍵拖拽 Player Start至Viewport面板虐块。
你可以隨意放置玩家出生點(diǎn)俩滥。放好后嘉蕾,點(diǎn)擊Toolbar的Play按鈕贺奠。玩家就會(huì)在出生點(diǎn)生成。
如果想要退出游戲错忱,點(diǎn)擊Toolbar的Stop按鈕或按下Esc鍵皆可儡率。如果你看不到鼠標(biāo)指針挂据,按下Shift+F1。
如果玩家不能控制移動(dòng)儿普,那其實(shí)算不上游戲崎逃,對(duì)吧?我們的下個(gè)任務(wù)就是設(shè)置輸入控制眉孩。
設(shè)置輸入
將某個(gè)按鍵指定成觸發(fā)某個(gè)行為个绍,稱之為按鍵綁定。
在Unreal里浪汪,你可以通過(guò)按鍵觸發(fā)event(事件)的方式來(lái)實(shí)現(xiàn)按鍵綁定巴柿。事件節(jié)點(diǎn)是一類當(dāng)接收到特定行為時(shí),觸發(fā)執(zhí)行的節(jié)點(diǎn)(比如在這個(gè)例子里死遭,當(dāng)你按下綁定按鍵時(shí)广恢,觸發(fā)執(zhí)行某個(gè)事件節(jié)點(diǎn))。當(dāng)某個(gè)事件被觸發(fā)時(shí)呀潭,任何跟事件節(jié)點(diǎn)連接的節(jié)點(diǎn)就會(huì)被執(zhí)行钉迷。
這種按鍵綁定的方式非常有好處,因?yàn)檫@意味著你不需要硬編碼按鍵對(duì)應(yīng)的邏輯钠署。
比如糠聪,你綁定了鼠標(biāo)左鍵并命名為Shoot事件。任何有射擊能力的Actor都可以使用Shoot事件谐鼎,用于檢測(cè)玩家何時(shí)按下了鼠標(biāo)左鍵枷颊。如果你想修改射擊對(duì)應(yīng)綁定的按鍵,只要在輸入設(shè)置里修改即可该面。
如果以硬編碼方式實(shí)現(xiàn)夭苗,你需要遍歷每個(gè)Actor,分別修改射擊對(duì)應(yīng)綁定的按鍵隔缀。
軸映射和操作映射
在Edit\Project Settings里可以看到輸入設(shè)置题造。點(diǎn)擊Engine部分的Input選項(xiàng)進(jìn)入設(shè)置界面捺癞。
Bindings就是用于設(shè)置輸入的部分滚澜。
Unreal提供了兩類按鍵綁定方法:
- Action Mapping(操作映射):這類綁定只有兩種狀態(tài):按下或者沒(méi)按下。行為只會(huì)在按下或釋放按鍵的時(shí)候觸發(fā)雏吭。這類綁定適用于沒(méi)有中間狀態(tài)的行為牵触,比如槍械射擊淮悼。
- Axis Mapping(軸映射):這類綁定輸出一個(gè)稱之為Axis Value(下文有更多介紹)的數(shù)字。每幀都會(huì)觸發(fā)對(duì)應(yīng)的軸事件揽思。這類綁定通常用于搖桿或者鼠標(biāo)袜腥。
在這篇教程里,我們會(huì)使用Axis Mapping钉汗。
創(chuàng)建移動(dòng)映射
首先羹令,你需要?jiǎng)?chuàng)建兩組Axis Mapping鲤屡。這樣就可以實(shí)現(xiàn)多按鍵觸發(fā)同一個(gè)事件。
為了創(chuàng)建一組新的Axis Mapping福侈,點(diǎn)擊Axis Mappings右側(cè)的+號(hào)酒来。創(chuàng)建兩組Axis Mapping,分別命名為MoveForward和MoveRight肪凛。
MoveForward負(fù)責(zé)前后移動(dòng)堰汉。MoveRight負(fù)責(zé)左右移動(dòng)。
我們需要把移動(dòng)映射到四個(gè)按鍵上:W伟墙,A衡奥,S和D。現(xiàn)在只有兩個(gè)插槽用于映射按鍵远荠。通過(guò)點(diǎn)擊每組映射文本框右側(cè)的+號(hào)矮固,添加映射插槽。
接著點(diǎn)擊每組插槽的下拉框譬淳,將W和S鍵映射到MoveForward档址,A和D鍵映射到MoveRight。
接著邻梆,我們需要設(shè)置Scale字段守伸。
Axis Value和Input Scale
在你設(shè)置Scale字段前,我們需要了解它是怎么跟axis values搭配起作用的浦妄。
Axis Value的輸出數(shù)值取決于輸入類型和使用方式尼摹。按鈕點(diǎn)擊會(huì)輸出1。搖桿根據(jù)推動(dòng)方向和力度剂娄,輸出-1~1之間的數(shù)值蠢涝。
你可以使用Axis Value控制角色的移動(dòng)速度。比如阅懦,如果你把搖桿推到了最邊上和二,Axis Value是1。如果你只推一半耳胎,Axis Value就是0.5惯吕。
將Axis Value跟某個(gè)速度變量進(jìn)行相乘,你就能夠調(diào)整搖桿的速度怕午。
你也可以通過(guò)Axis Value判斷出方向废登。如果你將角色速度與一個(gè)Axis Value正數(shù)相乘,得到的就是正數(shù)偏移郁惜。角色速度與一個(gè)Axis Value負(fù)數(shù)相乘堡距,得到的就是負(fù)數(shù)偏移。將偏移值與角色位置相加,就能知道角色往哪個(gè)方向移動(dòng)了吏颖。
由于鍵盤(pán)按鍵只能輸出0或1的Axis Value,你可以使用Scale來(lái)將其轉(zhuǎn)換成負(fù)數(shù)恨樟。通過(guò)Axis Value和Scale值相乘就可以做到這點(diǎn)半醉。
如果正數(shù)(Axis Value)和負(fù)數(shù)(Scale)相乘,按鍵輸出就是負(fù)數(shù)劝术。
因此我們點(diǎn)擊修改按鍵S和A的Scale字段文本為-1缩多。
接著,有趣的部分來(lái)了:讓角色動(dòng)起來(lái)养晋!關(guān)閉項(xiàng)目設(shè)置面板衬吆,雙擊BP_Player打開(kāi)藍(lán)圖編輯器。
角色移動(dòng)
首先绳泉,你需要獲取移動(dòng)映射的事件逊抡。在事件圖表空白處點(diǎn)擊右鍵打開(kāi)節(jié)點(diǎn)列表。從彈出菜單中搜索MoveForward零酪。添加處于Axis Events下的MoveForward節(jié)點(diǎn)冒嫡。注意我們要添加的是Axis Events下的紅色節(jié)點(diǎn),而非Axis Values下的綠色節(jié)點(diǎn)四苇。
添加MoveRight節(jié)點(diǎn)的步驟同上孝凌。
現(xiàn)在,我們需要設(shè)置下MoveForward節(jié)點(diǎn)月腋。
使用變量
為了實(shí)現(xiàn)移動(dòng)蟀架,我們需要指定角色的運(yùn)動(dòng)速度。最簡(jiǎn)單的方法是通過(guò)變量保存移動(dòng)速度榆骚。
要新建變量片拍,我們點(diǎn)擊My Blueprint頁(yè)簽Variable部分的+號(hào)。
選中新建的變量妓肢,觀察Details頁(yè)簽穆碎。將變量名重命名為MaxSpeed。隨后职恳,點(diǎn)擊Variable Type的下拉框選擇Float所禀,將變量類型修改為Float。
接著放钦,需要給變量設(shè)置默認(rèn)值色徘。在這之前,先點(diǎn)擊Toolbar上的Compile按鈕操禀。
保持變量選中褂策,在Details頁(yè)簽的Default Value區(qū)域,將MaxSpeed的默認(rèn)值設(shè)為10。
接著斤寂,將MaxSpeed變量從My Blueprint頁(yè)簽拖拽至Event Graph耿焊。并選擇彈出菜單的Get。
我們現(xiàn)在需要將MaxSpeed與Axis Value相乘來(lái)得出最終移動(dòng)速度和方向遍搞。添加float * float節(jié)點(diǎn)罗侯,并連接Axis Value和MaxSpeed。
獲取角色朝向
為了向前移動(dòng)溪猿,首先需要知道角色的朝向钩杰。幸運(yùn)地是,Unreal里有這樣的節(jié)點(diǎn)诊县。我們需要添加Get Actor Forward Vector節(jié)點(diǎn)讲弄。
接著,添加Add Movement Input節(jié)點(diǎn)依痊。該節(jié)點(diǎn)通過(guò)獲取方向和數(shù)值避除,將其轉(zhuǎn)換成移動(dòng)偏移值。我們按下圖連接各個(gè)節(jié)點(diǎn):
白線代表節(jié)點(diǎn)執(zhí)行順序胸嘁。換言之驹饺,玩家進(jìn)行操作,觸發(fā)相應(yīng)事件并執(zhí)行InputAxis MoveForward節(jié)點(diǎn)缴渊,隨后執(zhí)行Add Movement Input節(jié)點(diǎn)赏壹。
Add Movement Input節(jié)點(diǎn)需要如下輸入:
- Target:默認(rèn)為self,在這里就是玩家角色自己(紅色方塊)衔沼。
- World Direction:目標(biāo)移動(dòng)方向蝌借,在這里就是玩家角色的朝向。
- Scale Value:玩家移動(dòng)距離指蚁,在這里為Max Speed * Axis Value(值范圍為-1~1)菩佑。
MoveRight事件的設(shè)置步驟同上,除了要把Get Actor Forward Vector節(jié)點(diǎn)替換為Get Actor Right Vector節(jié)點(diǎn)凝化。試著不對(duì)照前面的操作指引稍坯,自己動(dòng)手看看!
添加移動(dòng)偏移
為了讓角色真正動(dòng)起來(lái)搓劫,我們還需要將Add Movement Input節(jié)點(diǎn)計(jì)算得出的偏移值瞧哟,累加到角色當(dāng)前位置上。
基本上我們的策略就是讓游戲角色每幀移動(dòng)一點(diǎn)點(diǎn)枪向,所以我們需要在Event Tick事件添加運(yùn)動(dòng)節(jié)點(diǎn)勤揩,每幀進(jìn)行調(diào)用。
現(xiàn)在看看Event Graph有沒(méi)有Event Tick節(jié)點(diǎn)秘蛔,它應(yīng)該處于灰化狀態(tài)陨亡,如果沒(méi)有就創(chuàng)建對(duì)應(yīng)節(jié)點(diǎn)傍衡。
為了獲取偏移值,創(chuàng)建Consume Movement Input Vector節(jié)點(diǎn)负蠕。要累加偏移值到玩家角色上蛙埂,還需要添加AddActorLocalOffset節(jié)點(diǎn)。隨后如下圖連接節(jié)點(diǎn):
這樣意味著在游戲每幀遮糖,你會(huì)獲取角色的移動(dòng)輸入绣的,并將其累加在角色當(dāng)前位置上。
點(diǎn)擊Compile止吁,回到主編輯器并點(diǎn)擊Play被辑。你就能操控紅色方塊四處移動(dòng)了燎悍!
這里有個(gè)小問(wèn)題敬惦。高配機(jī)器有可能運(yùn)行幀率更高。由于Event Tick事件每幀調(diào)用谈山,那同等時(shí)間內(nèi)運(yùn)動(dòng)節(jié)點(diǎn)執(zhí)行的次數(shù)更多俄删。導(dǎo)致的結(jié)果就是高配機(jī)器角色移動(dòng)得更快,反之亦然奏路。
為了避免這個(gè)問(wèn)題畴椰,角色運(yùn)動(dòng)必須是幀率無(wú)關(guān)的。
注意:我已經(jīng)做了按鍵綁定用于展示幀率有關(guān)會(huì)產(chǎn)生的影響鸽粉。按下數(shù)字鍵0將幀率調(diào)成60斜脂,按下數(shù)字鍵1將重置幀率〈セ控制角色四處移動(dòng)帚戳,看看不同幀率對(duì)移動(dòng)速度的影響。
幀率無(wú)關(guān)
幀率無(wú)關(guān)意味著不管幀率是多少儡首,相同時(shí)間的游戲運(yùn)行片任,會(huì)產(chǎn)生完全一致的結(jié)果。幸運(yùn)地是蔬胯,在Unreal里要做到這點(diǎn)非常容易对供。
退出游戲,并打開(kāi)BP_Player氛濒。接著产场,觀察Event Tick節(jié)點(diǎn)的Delta Seconds字段。
Delta Seconds為當(dāng)前幀的Event Tick調(diào)用與上一幀Event Tick調(diào)用的時(shí)間間隔舞竿。通過(guò)將偏移值與Delta Seconds相乘涝动,角色運(yùn)動(dòng)就是幀率無(wú)關(guān)的。
比如炬灭,你的角色最高速度是100醋粟。如果距離上一幀Event Tick已經(jīng)過(guò)了1秒靡菇,則角色移動(dòng)100個(gè)單元。如果只過(guò)了0.5秒米愿,則角色運(yùn)動(dòng)50個(gè)單元厦凤。
如果角色運(yùn)動(dòng)是幀率相關(guān)的,那就會(huì)產(chǎn)生不過(guò)幀率高低育苟,每幀固定移動(dòng)100單元的結(jié)果较鼓。
為了將偏移值與Delta Seconds相乘,添加vector * float節(jié)點(diǎn)违柏。之后博烂,如下圖進(jìn)行連線:
由于每幀間隔時(shí)間很短,角色移動(dòng)起來(lái)會(huì)很慢漱竖,所以可以將MaxSpeed的默認(rèn)值調(diào)大至600禽篱。
至此恭喜你,成功解鎖了幀率無(wú)關(guān)成就馍惹!
你可能注意到了躺率,方塊現(xiàn)在會(huì)穿透其他物體。為了解決這個(gè)問(wèn)題万矾,我們需要用上碰撞檢測(cè)悼吱。
角色碰撞
為了能夠互相碰撞,角色需要一個(gè)代表其碰撞區(qū)域(通常稱之為碰撞體)的東西良狈。你可以使用以下任一種:
- Collision mesh(碰撞網(wǎng)格):這個(gè)通常在網(wǎng)格導(dǎo)入時(shí)就會(huì)生成(如果你勾選了允許)后添。用戶也可以用3D軟件創(chuàng)建自定義碰撞網(wǎng)格。紅色方塊導(dǎo)入時(shí)就自動(dòng)生成了碰撞網(wǎng)格薪丁。
- Collision component(碰撞組件):一般由三種形狀:盒子遇西,膠囊體和球體。你可以通過(guò)Components面板進(jìn)行添加窥突。通常用于簡(jiǎn)單碰撞努溃。
下面就是一個(gè)人物和其碰撞體的例子。
當(dāng)一個(gè)碰撞體碰到了另個(gè)碰撞體阻问,碰撞就產(chǎn)生了梧税。
設(shè)置碰撞
你可能會(huì)奇怪,方塊有碰撞體称近,卻沒(méi)有檢測(cè)到碰撞第队。當(dāng)你移動(dòng)方塊時(shí),Unreal只認(rèn)為方塊的根組件可產(chǎn)生碰撞刨秆。由于方塊的根組件并沒(méi)有任何碰撞體凳谦,所以就穿透了其他物體。
注意:一個(gè)root組件沒(méi)有碰撞體的角色衡未,同樣可以擋住其他角色尸执。但如果你移動(dòng)這個(gè)角色家凯,它是不會(huì)與任何物體產(chǎn)生碰撞的。
所以如失,為了使用碰撞網(wǎng)格绊诲,StaticMesh必須作為根組件存在。我們通過(guò)在Components面板左鍵拖拽StaticMesh至DefaultSceneRoot褪贵。釋放鼠標(biāo)掂之,StaticMesh現(xiàn)在就成了根組件了。
最后還要做一件事情脆丁。切換到Event Graph頁(yè)簽世舰,將AddActorLocalOffset節(jié)點(diǎn)的Sweep輸入勾選為true。
簡(jiǎn)單來(lái)講槽卫,AddActorLocalOffset會(huì)將角色從舊位置瞬移到新位置上跟压。Sweep可以確保舊位置和新位置之間的物體都能與角色進(jìn)行碰撞檢測(cè)。
回到主編輯器并點(diǎn)擊Play∩辜校現(xiàn)在方塊能與關(guān)卡場(chǎng)景產(chǎn)生碰撞了裆馒!
創(chuàng)建道具
任何東西都能成為供玩家觸碰拾取的道具姊氓。這里我們使用BP_Banana作為道具丐怯。
為了檢測(cè)方塊是否碰到了道具,我們需要一個(gè)在產(chǎn)生碰撞時(shí)翔横,觸發(fā)執(zhí)行的事件節(jié)點(diǎn)读跷。我們可以使用碰撞響應(yīng)來(lái)生成事件。
碰撞響應(yīng)也決定了角色之間的碰撞后行為禾唁。有以下三類碰撞響應(yīng):Ignore效览,Overlap和Block。以下是它們互相之間的作用結(jié)果:
雖然可以使用Overlap或Block的任一種荡短,本篇教程只展示如何使用Overlap丐枉。
設(shè)置碰撞響應(yīng)
退出游戲并打開(kāi)BP_Banana。選擇StaticMesh組件并觀察Details面板掘托,Collision部分可以設(shè)置碰撞響應(yīng)瘦锹。
如圖所示,大部分設(shè)置都是灰置的闪盔。為了編輯它們弯院,左鍵點(diǎn)擊Collision Presets的下拉框,選擇Custom選項(xiàng)泪掀。
現(xiàn)在听绳,你需要指定道具和方塊之間的碰撞響應(yīng)。
組件有一項(xiàng)屬性稱之為對(duì)象類型异赫。對(duì)象類型是一種給角色進(jìn)行簡(jiǎn)單分類的方法椅挣。你可以在這里了解更多關(guān)于對(duì)象類型的內(nèi)容头岔。
由于方塊的類型是WorldDynamic,我們需要修改該類型對(duì)象的碰撞響應(yīng)鼠证。在Collision Responses設(shè)置下切油,左鍵點(diǎn)擊WorldDynamic中間的勾選框,將碰撞響應(yīng)改成Overlap名惩。
碰撞處理
為了獲取碰撞情況并進(jìn)行處理澎胡,我們需要用到overlap事件。在Components面板右鍵點(diǎn)擊StaticMesh娩鹉。從彈出菜單中攻谁,選擇Add Event\Add OnComponentBeginOverlap。
Event Graph界面就會(huì)出現(xiàn)OnComponentBeginOverlap (StaticMesh)節(jié)點(diǎn)弯予。
最后戚宦,添加DestroyActor節(jié)點(diǎn),并連接OnComponentBeginOverlap (StaticMesh)節(jié)點(diǎn)锈嫩。顧名思義受楼,該節(jié)點(diǎn)會(huì)將目標(biāo)角色從游戲中移除。由于我們沒(méi)有顯式指定Target呼寸,所以它會(huì)銷毀調(diào)用該節(jié)點(diǎn)的角色艳汽。
放置道具
關(guān)閉藍(lán)圖編輯器,并確保Content Browser打開(kāi)了Blueprints文件夾对雪。
通過(guò)左鍵拖拽 BP_Banana至Viewport界面來(lái)在關(guān)卡放置香蕉道具河狐。
點(diǎn)擊Play按鈕,開(kāi)始收集香蕉吧瑟捣!
后續(xù)學(xué)習(xí)
你可以在這里下載完整項(xiàng)目馋艺。
你現(xiàn)在距離成為Unreal Engine專家又近了一步了。希望這篇教程沒(méi)有難倒你迈套。
如果你還想繼續(xù)學(xué)習(xí)Unreal Engine 4引擎捐祠,點(diǎn)擊下篇教程,我會(huì)進(jìn)一步講解Unreal Engine 4引擎的材質(zhì)系統(tǒng)桑李。