Unreal Engine 4 系列教程 Part 2:藍(lán)圖教程

原文: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系列教程的其中一篇:

起步入門(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按鈕并回到主編輯器境输。

生成玩家

為了讓玩家能夠控制角色,你需要明確兩件事:

  1. 玩家所要控制的Pawn類
  2. 角色應(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,分別命名為MoveForwardMoveRight肪凛。

MoveForward負(fù)責(zé)前后移動(dòng)堰汉。MoveRight負(fù)責(zé)左右移動(dòng)。

我們需要把移動(dòng)映射到四個(gè)按鍵上:W伟墙,A衡奥,SD。現(xiàn)在只有兩個(gè)插槽用于映射按鍵远荠。通過(guò)點(diǎn)擊每組映射文本框右側(cè)的+號(hào)矮固,添加映射插槽。

接著點(diǎn)擊每組插槽的下拉框譬淳,將WS鍵映射到MoveForward档址,AD鍵映射到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)擊修改按鍵SAScale字段文本為-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)在需要將MaxSpeedAxis Value相乘來(lái)得出最終移動(dòng)速度和方向遍搞。添加float * float節(jié)點(diǎn)罗侯,并連接Axis ValueMaxSpeed

獲取角色朝向

為了向前移動(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效览,OverlapBlock。以下是它們互相之間的作用結(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)桑李。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末踱蛀,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子芙扎,更是在濱河造成了極大的恐慌星岗,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件戒洼,死亡現(xiàn)場(chǎng)離奇詭異俏橘,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)圈浇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)寥掐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)靴寂,“玉大人,你說(shuō)我怎么就攤上這事召耘“倬妫” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵污它,是天一觀的道長(zhǎng)剖踊。 經(jīng)常有香客問(wèn)我,道長(zhǎng)衫贬,這世上最難降的妖魔是什么德澈? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮固惯,結(jié)果婚禮上梆造,老公的妹妹穿的比我還像新娘。我一直安慰自己葬毫,他們只是感情好镇辉,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著贴捡,像睡著了一般忽肛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上栈暇,一...
    開(kāi)封第一講書(shū)人閱讀 51,155評(píng)論 1 299
  • 那天麻裁,我揣著相機(jī)與錄音箍镜,去河邊找鬼源祈。 笑死,一個(gè)胖子當(dāng)著我的面吹牛色迂,可吹牛的內(nèi)容都是我干的香缺。 我是一名探鬼主播,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼歇僧,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼图张!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起诈悍,我...
    開(kāi)封第一講書(shū)人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤祸轮,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后侥钳,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體适袜,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年舷夺,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了苦酱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片售貌。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖疫萤,靈堂內(nèi)的尸體忽然破棺而出颂跨,到底是詐尸還是另有隱情,我是刑警寧澤扯饶,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布恒削,位于F島的核電站,受9級(jí)特大地震影響尾序,放射性物質(zhì)發(fā)生泄漏蔓同。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一蹲诀、第九天 我趴在偏房一處隱蔽的房頂上張望斑粱。 院中可真熱鬧,春花似錦脯爪、人聲如沸则北。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)尚揣。三九已至,卻和暖如春掖举,著一層夾襖步出監(jiān)牢的瞬間快骗,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工塔次, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留方篮,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓励负,卻偏偏與公主長(zhǎng)得像藕溅,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子继榆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353