原文:How to Create a Simple FPS in Unreal Engine 4
作者:Tommy Tran
譯者:Shuchang Liu
在本篇教程中,將學(xué)習(xí)創(chuàng)建一個(gè)簡單的第一人稱視角射擊游戲废境。你將學(xué)會(huì)如何創(chuàng)建一個(gè)持槍的第一人稱角色畜挨,并實(shí)現(xiàn)射擊其他Actor。
第一人稱視角射擊游戲(FPS)是一類玩家以游戲角色視角進(jìn)行射擊體驗(yàn)的游戲噩凹。FPS游戲非常熱門巴元,不乏使命召喚和戰(zhàn)地等大作。
Unreal引擎最開始就是為FPS游戲量身打造的引擎栓始,所以用Unreal引擎制作FPS游戲也是理所當(dāng)然的事务冕。在本篇教程中,你將學(xué)會(huì):
創(chuàng)建能夠四處移動(dòng)的第一人稱角色
創(chuàng)建一把槍幻赚,綁定在角色身上
使用直線追蹤(大家熟知的射線追蹤)發(fā)射子彈
-
對(duì)Actor扣除傷害
注意:本篇教程只是Unreal Engine 4系列教程的其中一篇:
起步入門
下載示例項(xiàng)目并解壓禀忆。進(jìn)入項(xiàng)目文件夾臊旭,雙擊BlockBreaker.uproject打開項(xiàng)目,我們能看到以下場景:
綠色墻上包含著多個(gè)目標(biāo)箩退,當(dāng)目標(biāo)受到傷害時(shí)會(huì)變紅离熏。一旦血量值降為零,目標(biāo)就會(huì)消失戴涝。紅色按鈕可以重置所有的目標(biāo)滋戳。
首先,我們要?jiǎng)?chuàng)建玩家角色啥刻。
創(chuàng)建玩家角色
打開Blueprints文件夾并創(chuàng)建一個(gè)新的Blueprint Class類奸鸯,選擇Character作為父類,并將其命名為BP_Player可帽。
Character本身是Pawn的一種娄涩,額外多了一些其他功能,比如CharacterMovement組件映跟。
該組件會(huì)自動(dòng)處理如走動(dòng)跑跳等移動(dòng)功能蓄拣,我們只要簡單調(diào)用對(duì)應(yīng)函數(shù)就可以移動(dòng)角色。我們也可以在該組件設(shè)置走路速度努隙,起跳速度等變量球恤。
在實(shí)現(xiàn)移動(dòng)功能前,Character需要知道玩家的按鍵情況荸镊,因?yàn)槲覀兿葘⒁苿?dòng)映射到W咽斧,A,S和D鍵上贷洲。
注意:如果你還不熟悉關(guān)于鍵位映射的有關(guān)內(nèi)容收厨,請(qǐng)查看藍(lán)圖教程。鍵位映射是一種定義鍵位執(zhí)行特定行為的方法优构。
創(chuàng)建移動(dòng)映射
選擇Edit\Project Settings诵叁,打開Input設(shè)置。
創(chuàng)建兩個(gè)名為MoveForward和MoveRight的軸映射钦椭。MoveForward控制前后移動(dòng)拧额,MoveRight控制左右移動(dòng)。
對(duì)于MoveForward彪腔,將按鍵改為W侥锦,隨后岗钩,創(chuàng)建多一個(gè)鍵位插槽夫否,將其設(shè)置為S悄晃,并將Scale改為-1.0愈犹。
隨后佑力,我們會(huì)將Scale值跟角色朝向向量相乘淌喻,當(dāng)Scale值是正數(shù)時(shí)姆坚,向量方向朝前笆搓,當(dāng)Scale值是負(fù)數(shù)時(shí),向量方向朝后玄柏。通過得出的向量結(jié)果襟衰,我們就可以讓角色朝前朝后移動(dòng)了。
接著粪摘,我們要對(duì)左右移動(dòng)做同樣的設(shè)置瀑晒,將MoveRight設(shè)為D,新建鍵位插槽設(shè)為A徘意,Scale值設(shè)為-1.0苔悦。
現(xiàn)在我們設(shè)置好了鍵位映射,就可以用它們來進(jìn)行移動(dòng)了映砖。
實(shí)現(xiàn)移動(dòng)
打開BP_Player并打開Event Graph间坐,添加MoveForward事件節(jié)點(diǎn)(在Axis Events分類下)。即使沒有按任何按鍵邑退,該事件也會(huì)每幀調(diào)用。
該事件會(huì)輸出Axis Value劳澄,也即剛才所設(shè)置的Scale值地技。當(dāng)按下W時(shí),輸出1秒拔,當(dāng)按下S時(shí)莫矗,輸出-1。如果不按任何按鍵砂缩,輸出0作谚。
接著,我們要讓角色進(jìn)行移動(dòng)庵芭,添加Add Movement Input妹懒,進(jìn)行如下連接:
Add Movement Input節(jié)點(diǎn)會(huì)用一個(gè)向量與Scale Value字段相乘,這樣就能將向量轉(zhuǎn)換到對(duì)應(yīng)方向双吆。由于我們用了Character類眨唬,CharacterMovement組件會(huì)將Pawn往對(duì)應(yīng)方向移動(dòng)向量距離。
現(xiàn)在好乐,我們需要指定移動(dòng)方向匾竿。我們希望角色往正面朝向移動(dòng),所以可以使用Get Actor Forward Vector節(jié)點(diǎn)蔚万,該節(jié)點(diǎn)返回一個(gè)正面朝向向量岭妖,創(chuàng)建節(jié)點(diǎn)如圖下一樣連接:
小結(jié):
- MoveForward節(jié)點(diǎn)會(huì)每幀輸出Axis Value,當(dāng)按下W時(shí)輸出1,當(dāng)按下S時(shí)輸出-1昵慌,什么都不按假夺,輸出0
- Add Movement Input節(jié)點(diǎn)將玩家朝向向量與Scale Value相乘,使得不同按鍵控制輸出不同方向的向量废离。什么都不按侄泽,意味著向量并沒有方向,角色原地不動(dòng)
- CharacterMovement組件獲得Add Movement Input節(jié)點(diǎn)的輸出蜻韭,驅(qū)動(dòng)角色朝指定方向移動(dòng)
MoveRight按以上步驟操作悼尾,不過記得將Get Actor Forward Vector節(jié)點(diǎn)改為Get Actor Right Vector節(jié)點(diǎn)。
在測試移動(dòng)功能前肖方,我們還要設(shè)置下Game Mode里的默認(rèn)Pawn闺魏。
設(shè)置默認(rèn)Pawn
點(diǎn)擊Compile并回到主編輯器,打開World Settings面板并找到Game Mode設(shè)置俯画,將Default Pawn Class改為BP_Player析桥。
注意:如果你的主編輯器面板還沒有World Settings面板,在Toolbar選擇Settings\World Settings調(diào)出面板艰垂。
現(xiàn)在運(yùn)行游戲你就能控制BP_Player了泡仗,按下Play并使用W,S猜憎,A和D來進(jìn)行移動(dòng)娩怎。
我們接著創(chuàng)建輸入映射來觀察四周。
創(chuàng)建觀察映射
打開Project Settings胰柑,再創(chuàng)建兩個(gè)軸映射截亦,分別命名為LookHorizontal和LookVertical。
將LookHorizontal的鍵位改為Mouse X柬讨。
這樣當(dāng)鼠標(biāo)向右滑動(dòng)時(shí)會(huì)輸出正數(shù)崩瓤,反之亦然。
接著踩官,將LookVertical的鍵位改為Mouse Y却桶。
這樣當(dāng)鼠標(biāo)向上滑動(dòng)時(shí)會(huì)輸出正數(shù),反之亦然卖鲤。
現(xiàn)在肾扰,我們要寫點(diǎn)邏輯來實(shí)現(xiàn)轉(zhuǎn)動(dòng)視角。
實(shí)現(xiàn)轉(zhuǎn)動(dòng)視角
如果一個(gè)Pawn上沒有Camera組件蛋逾,Unreal會(huì)自動(dòng)為你創(chuàng)建一個(gè)攝像機(jī)集晚。默認(rèn)情況下,攝像機(jī)會(huì)使用控制器的旋轉(zhuǎn)区匣。
注意:如果你想了解更多關(guān)于控制器的內(nèi)容偷拔,可以查看AI部分教程蒋院。
雖然控制器并沒有物理實(shí)體,它仍舊有自己的旋轉(zhuǎn)莲绰。這意味著我們可以讓角色和攝像機(jī)面向不同方向欺旧。比如,在第三人稱游戲里蛤签,角色和攝像機(jī)并不總是處于同一方向辞友。
要在第一人稱視角里轉(zhuǎn)動(dòng)攝像機(jī),我們所要做的就是修改控制器的旋轉(zhuǎn)震肮。
打開BP_Player并創(chuàng)建LookHorizontal事件称龙。
要讓攝像機(jī)看向左邊或右邊,我們需要調(diào)整控制器的偏航角(Yaw)戳晌,創(chuàng)建Add Controller Yaw Input節(jié)點(diǎn)并進(jìn)行如下連接:
現(xiàn)在鲫尊,當(dāng)你水平移動(dòng)鼠標(biāo)時(shí),控制器會(huì)向左或向右轉(zhuǎn)動(dòng)沦偎,由于攝像機(jī)使用了控制器的旋轉(zhuǎn)疫向,攝像機(jī)也會(huì)跟著轉(zhuǎn)動(dòng)。
重復(fù)以上步驟實(shí)現(xiàn)LookVertical豪嚎,不過記得將Add Controller Yaw Input改為Add Controller Pitch Input節(jié)點(diǎn)搔驼。
如果我們現(xiàn)在就運(yùn)行測試游戲,會(huì)發(fā)現(xiàn)上下轉(zhuǎn)動(dòng)的反轉(zhuǎn)的侈询,也就是說匙奴,當(dāng)我們鼠標(biāo)向上滑動(dòng),攝像機(jī)是向下轉(zhuǎn)動(dòng)的妄荔。
如果想改成非反轉(zhuǎn)控制,將Axis Value剩余-1谍肤,這樣就能對(duì)Axis Value取反啦租,控制器的轉(zhuǎn)動(dòng)也會(huì)反轉(zhuǎn)過來。
點(diǎn)擊Compile并按下Play運(yùn)行游戲荒揣,使用鼠標(biāo)來轉(zhuǎn)動(dòng)視角吧篷角。
現(xiàn)在移動(dòng)和視角轉(zhuǎn)動(dòng)都實(shí)現(xiàn)了,是時(shí)候搞把槍了系任!
創(chuàng)建槍支
你還記得當(dāng)創(chuàng)建藍(lán)圖類時(shí)恳蹲,我們可以指定一個(gè)父類吧?好吧俩滥,其實(shí)也可以指定自己的藍(lán)圖類作為父類嘉蕾。當(dāng)我們有多個(gè)不同類型的物體,擁有同樣的函數(shù)或?qū)傩詴r(shí)霜旧,就會(huì)發(fā)現(xiàn)很有用處错忱。
舉例來說,當(dāng)我們有多種類型的汽車。我們可以創(chuàng)建一個(gè)Car類以清,包含比如速度和顏色等變量儿普。然后可以再創(chuàng)建其他類(子類),使用Car類作為父類掷倔。每個(gè)子類都會(huì)包含同樣的變量∶己ⅲ現(xiàn)在我們就能輕易地創(chuàng)建不同速度和顏色變量的汽車了。
我們可以使用相同方式來創(chuàng)建槍支勒葱。因?yàn)槲覀兪紫纫獎(jiǎng)?chuàng)建一個(gè)基類浪汪。
創(chuàng)建槍支基類
回到主編輯器并創(chuàng)建Actor類型的Blueprint Class,將其命名為BP_BaseGun并打開错森。
接著吟宦,我們要?jiǎng)?chuàng)建一些定義槍械參數(shù)的變量,創(chuàng)建如下float類型變量:
- MaxBulletDistance:子彈最遠(yuǎn)飛行距離
- Damage:子彈傷害
- FireRate:子彈發(fā)射間隔(秒)
注意:每個(gè)變量的默認(rèn)值都是0涩维,對(duì)本例來說沒什么問題殃姓。然而,如果你希望新的槍支類有別的默認(rèn)值瓦阐,你需要在BP_BaseGun設(shè)置下蜗侈。
現(xiàn)在,我們需要給槍支一個(gè)物理外觀睡蟋,添加Static Mesh組件并命名為GunMesh踏幻。
先別急著給Static Mesh組件設(shè)置網(wǎng)格,我們會(huì)在創(chuàng)建槍械子類時(shí)再做這件事戳杀。
創(chuàng)建槍械子類
點(diǎn)擊Compile并返回主編輯器该面。要?jiǎng)?chuàng)建子類,我們要在右鍵點(diǎn)擊BP_BaseGun信卡,從彈出菜單選中Create Child Blueprint Class隔缀。
將其命名為BP_Rifle并雙擊打開,然后打開Class Default設(shè)置以下變量:
- MaxBulletDistance: 5000
- Damage: 2
- FireRate: 0.1
這意味著每顆子彈能最遠(yuǎn)飛行5000單位的距離傍菇。如果子彈命中Actor猾瘸,能對(duì)其造成2點(diǎn)傷害。當(dāng)持續(xù)開火射擊時(shí)丢习,射擊間隔不少于0.1秒牵触。
接著,我們需要指定這把槍的網(wǎng)格咐低,選中GunMesh組件揽思,并將其Static Mesh設(shè)置為SM_Rifle。
這把槍現(xiàn)在就完成了渊鞋,點(diǎn)擊Compile并關(guān)閉BP_Rifle绰更。
接著瞧挤,我們要?jiǎng)?chuàng)建自己的攝像機(jī)組件了。這樣能夠更好地控制攝像機(jī)位置儡湾,我們還可以將槍支跟攝像機(jī)綁定在一起特恬,這樣槍支就能始終保持在攝像機(jī)的正面了。
創(chuàng)建攝像機(jī)
打開BP_Player并創(chuàng)建攝像機(jī)組件徐钠,將其命名為FpsCamera癌刽。
攝像機(jī)的默認(rèn)位置有點(diǎn)偏低,會(huì)讓玩家感覺太矮尝丐,將FpsCamera的位置改為(0, 0, 90)显拜。
默認(rèn)情況下,攝像機(jī)組件并不使用控制器的旋轉(zhuǎn)爹袁。要修正這點(diǎn)远荠,在Details面板啟用Camera Settings\Use Pawn Control Rotation。
接著失息,我們需要定義槍支的位置譬淳。
定義槍支位置
要定義槍支位置,我們可以使用Scene組件盹兢。這個(gè)組件非常適合用來定義位置邻梆,因?yàn)樗话粋€(gè)Transform。首先確保選中了FpsCamera绎秒,然后再創(chuàng)建Scene組件浦妄,組件就會(huì)附著在攝像機(jī)節(jié)點(diǎn)下,將組件命名為GunLocation见芹。
通過在FpsCamera放置GunLocation剂娄,槍支就會(huì)相對(duì)于攝像機(jī)保持同一位置,這樣槍支就能始終保持在鏡頭前方玄呛。
接著宜咒,將GunLocation的位置改為(30, 14, -12),讓其處于相對(duì)攝像機(jī)靠前一側(cè)位置把鉴。
隨后,將旋轉(zhuǎn)設(shè)為(0, 0, -95)儿咱。當(dāng)槍支在這個(gè)位置時(shí)庭砍,看起來就像在瞄準(zhǔn)屏幕中間。
現(xiàn)在混埠,我們需要生成槍支并將其綁定在GunLocation位置上怠缸。
生成并綁定槍支
找到Event BeginPlay并創(chuàng)建Spawn Actor From Class節(jié)點(diǎn),將Class設(shè)為BP_Rifle钳宪。
由于我們需要用到槍支揭北,先創(chuàng)建變量存儲(chǔ)其引用扳炬。創(chuàng)建BP_BaseGun類型變量,將其命名為EquippedGun搔体。
這里要注意新建變量不要設(shè)為BP_Rifle類型的恨樟,因?yàn)橥婕覒?yīng)該能夠使用各種類型的槍支,而不單只是來福槍疚俱,否則如果生成了其他種類的槍支劝术,就不能存儲(chǔ)在BP_Rifle類型變量上了。
接著呆奕,將Spawn Actor From Class的Return Value引腳設(shè)為EquippedGun养晋。
要綁定槍支的位置,我們需要用上AttachToComponent組件梁钾。創(chuàng)建組件并將Location Rule和Rotation Rule設(shè)為Snap to Target绳泉。這樣就能讓槍支擁有跟其父類一樣的位置和旋轉(zhuǎn)。
接著姆泻,創(chuàng)建GunLocation引用并進(jìn)行如下連線:
小結(jié):
- 當(dāng)BP_Player生成時(shí)零酪,它會(huì)連帶生成BP_Rifle實(shí)例
- EquippedGun字段會(huì)持有BP_Rifle引用
- AttachToComponent節(jié)點(diǎn)會(huì)將槍支設(shè)置在GunLocation位置。
點(diǎn)擊Compile并按下Play運(yùn)行游戲÷笊洌現(xiàn)在當(dāng)玩家生成時(shí)蛾娶,槍支也會(huì)一同生成,顯示在攝像機(jī)的前面潜秋。
現(xiàn)在有趣的地方來了:射擊子彈蛔琅!要檢測子彈是否打中東西,我們要用上射線檢測(line trace)峻呛。
射擊子彈
射線檢測是一個(gè)包含開始點(diǎn)和結(jié)束點(diǎn)(兩點(diǎn)成線)的函數(shù)罗售,它會(huì)檢測這條線上的每個(gè)點(diǎn),看是否碰到其他物體钩述。在游戲中寨躁,這是用于檢測子彈是否打中東西的最普遍做法。
由于射擊是屬于槍支的特性牙勘,射擊函數(shù)應(yīng)該設(shè)計(jì)在槍支類里职恳,而不是角色類。打開BP_BaseGun并創(chuàng)建名為Shoot的函數(shù)方面。
隨后放钦,創(chuàng)建兩個(gè)Vector輸入,分別命名為StartLocation和EndLocation恭金。它們分別為射線檢測的開始點(diǎn)和結(jié)束點(diǎn)(通過BP_Player傳入)操禀。
我們可以使用LineTraceByChannel節(jié)點(diǎn)來執(zhí)行射線檢測。這個(gè)節(jié)點(diǎn)會(huì)使用可視力(Visibility)或者攝像機(jī)(Camera)碰撞通道來進(jìn)行碰撞檢測横腿。創(chuàng)建節(jié)點(diǎn)颓屑,進(jìn)行如下連線:
接著斤寂,我們需要檢測射線是否碰撞到任何東西。創(chuàng)建Branch并進(jìn)行如下連線:
如果檢測到碰撞揪惦,Return Value會(huì)輸出true遍搞,反之亦然。
為了在子彈擊中物體時(shí)給予玩家視覺反饋丹擎,我們可以使用粒子特效尾抑。
生成子彈撞擊粒子
首先,我們需要獲得射線碰撞的位置蒂培。拖拽Out Hit引腳到圖表空白處再愈,從彈出菜單中,選擇Break Hit Result护戳。
這樣我們能得到一個(gè)跟射線檢測結(jié)果相關(guān)的翎冲,具有多種引腳的節(jié)點(diǎn)。
創(chuàng)建Spawn Emitter at Location節(jié)點(diǎn)媳荒,并將Emitter Template設(shè)為PS_BulletImpact抗悍。隨后,連接其Location與Break Hit Result的Location钳枕。
以下是目前的函數(shù)連線:
小結(jié):
- 當(dāng)Shoot函數(shù)執(zhí)行時(shí)缴渊,它首先會(huì)執(zhí)行一個(gè)射線檢測
- 如果檢測到碰撞,Spawn Emitter at Location節(jié)點(diǎn)會(huì)在碰撞位置生成粒子特效PS_BulletImpact鱼炒。
現(xiàn)在射擊邏輯已經(jīng)完成了衔沼,再寫下調(diào)用邏輯即可。
調(diào)用射擊函數(shù)
首先昔瞧,我們需要?jiǎng)?chuàng)建射擊的按鍵映射指蚁。點(diǎn)擊Compile并打開Project Settings。創(chuàng)建一個(gè)新的Axis Mapping并命名為Shoot自晰,將其按鍵設(shè)為Left Mouse Button凝化,然后關(guān)閉Project Settings。
隨后酬荞,打開BP_Player并創(chuàng)建Shoot事件搓劫。
為了檢測玩家是否按下Shoot鍵,我們需要檢測Axis Value是否等于1混巧。創(chuàng)建如下高亮節(jié)點(diǎn):
接著糟把,創(chuàng)建EquippedGun引用節(jié)點(diǎn),并調(diào)用它的Shoot函數(shù)牲剃。
現(xiàn)在,我們需要計(jì)算下射線檢測的起始點(diǎn)和結(jié)束點(diǎn)雄可。
計(jì)算射線檢測的位置
在很多FPS游戲里凿傅,子彈其實(shí)是從攝像機(jī)而不是從槍里發(fā)射出來的缠犀,這是因?yàn)閿z像機(jī)天然就是對(duì)準(zhǔn)射擊準(zhǔn)心的。所以如果從攝像機(jī)發(fā)射子彈聪舒,就可以保證其一定會(huì)往準(zhǔn)心飛行辨液。
注意:也有些游戲確實(shí)是從槍里發(fā)射子彈的。然而箱残,它要求一些額外計(jì)算來保證子彈向準(zhǔn)心方向射擊滔迈。
創(chuàng)建FpsCamera引用并將其與GetWorldLocation連接。
現(xiàn)在我們還需要結(jié)束點(diǎn)位置被辑。記得槍支有個(gè)MaxBulletDistance變量吧燎悍,這意味著結(jié)束點(diǎn)位置應(yīng)該在距離攝像機(jī)MaxBulletDistance單位遠(yuǎn)的地方。因此要計(jì)算出結(jié)束點(diǎn)位置盼理,添加如下高亮節(jié)點(diǎn):
隨后谈山,像下圖一樣連接所有節(jié)點(diǎn):
小結(jié):
- 當(dāng)玩家按下或按住鼠標(biāo)左鍵時(shí),槍支會(huì)從攝像機(jī)處開始發(fā)射子彈宏怔。
- 子彈會(huì)向前飛行MaxBulletDistance距離
點(diǎn)擊Compile并按下Play運(yùn)行游戲奏路,按住鼠標(biāo)左鍵開始發(fā)射子彈吧!
現(xiàn)在臊诊,槍支是每幀都在射擊的鸽粉,射速實(shí)在是有點(diǎn)太快了,所以下一步要降低槍支的開火速度抓艳。
降低開火速度
首先触机,我們需要一個(gè)變量檢測玩家是否正在射擊。打開BP_Player創(chuàng)建boolean類型變量壶硅,命名為CanShoot威兜,將其默認(rèn)值設(shè)為true。如果CanShoot等于true庐椒,說明玩家正在射擊椒舵。
下面將Branch部分圖表改成下圖:
現(xiàn)在,玩家只有在按下Shoot鍵且CanShoot等于true時(shí)才能進(jìn)行射擊了约谈。
接著笔宿,添加如下高亮節(jié)點(diǎn):
調(diào)整修改小結(jié):
- 玩家只有在按住鼠標(biāo)左鍵且CanShoot等于true時(shí)才能進(jìn)行射擊
- 一旦玩家射出一顆子彈,CanShoot就會(huì)設(shè)為false棱诱,防止馬上射出第二顆子彈
- CanShoot會(huì)在隔FireRate秒時(shí)間后重置為true
點(diǎn)擊Compile并關(guān)閉BP_Player泼橘,按下Play運(yùn)行游戲測試下槍支的射速吧!
實(shí)現(xiàn)受擊
在Unreal里迈勋,每個(gè)Actor都能受擊炬灭。然而,Actor要對(duì)受擊傷害做出什么處理是可以自由定義的靡菇。
比如重归,當(dāng)戰(zhàn)斗中的游戲角色當(dāng)受擊時(shí)米愿,會(huì)扣除血量。然而鼻吮,像氣球一類物體是沒有血量概念的育苟。取而代之的,我們會(huì)編寫邏輯讓氣球在受擊時(shí)爆炸椎木。
在我們處理Actor受擊時(shí)违柏,我們首先要施加一個(gè)“傷害”。打開BP_BaseGun并在Shoot函數(shù)后添加Apply Damage節(jié)點(diǎn)香椎。
接著漱竖,我們需要指定要施加傷害的Actor,在本例中士鸥,就是射線檢測到的Actor闲孤。連接Damaged Actor與Break Hit Result的Hit Actor引腳。
最后烤礁,我們需要指定要受擊傷害數(shù)值讼积,創(chuàng)建Damage變量引用,并與Base Damage相連脚仔。
現(xiàn)在勤众,當(dāng)我們調(diào)用Shoot函數(shù)時(shí),它就會(huì)對(duì)射線檢測到的物體進(jìn)行傷害鲤脏。點(diǎn)擊Compile并關(guān)閉BP_BaseGun们颜。
現(xiàn)在我們需要處理每種Actor對(duì)于受擊傷害的反饋。
處理受擊
首先猎醇,我們需要處理目標(biāo)獲得傷害數(shù)據(jù)窥突,打開BP_Target并創(chuàng)建Event AnyDamage事件節(jié)點(diǎn),這個(gè)節(jié)點(diǎn)會(huì)在受到傷害且其數(shù)值不為零時(shí)觸發(fā)執(zhí)行硫嘶。
隨后阻问,調(diào)用TakeDamage函數(shù)并連接Damage引腳。這個(gè)函數(shù)會(huì)將目標(biāo)的Health變量減去Damage數(shù)值沦疾,并更新目標(biāo)的顏色称近。
現(xiàn)在,當(dāng)目標(biāo)受到傷害時(shí)哮塞,它就會(huì)扣除血量了刨秆。點(diǎn)擊Compile并關(guān)閉BP_Target。
接著忆畅,我們需要處理按鈕對(duì)傷害的反饋衡未。打開BP_ResetButton并創(chuàng)建Event AnyDamage。隨后,調(diào)用ResetTargets函數(shù)缓醋。
這個(gè)函數(shù)會(huì)在按鈕受擊時(shí)調(diào)用并重置所有目標(biāo)的狀態(tài)剔交。點(diǎn)擊Compile并關(guān)閉BP_ResetButton。
按下Play運(yùn)行游戲開始射擊目標(biāo)改衩。如果你想要重置所有目標(biāo),就朝按鈕射擊驯镊。
后續(xù)學(xué)習(xí)
你可以在這里下載完整項(xiàng)目葫督。
雖然本篇教程中所制作是一個(gè)非常簡單的FPS游戲,你可以在此基礎(chǔ)上進(jìn)一步擴(kuò)展板惑,試著創(chuàng)建更多具有不用射速和傷害的槍械橄镜,也可以嘗試添加裝彈功能!
以上就是Unreal Engine 4 系列教程的全部內(nèi)容了冯乘。不過別擔(dān)心洽胶,我們后續(xù)還會(huì)制作更多關(guān)于Unreal Engine 4的教程。現(xiàn)在我們開始在招募新的Unreal Engine教程團(tuán)隊(duì)了裆馒,希望可以為社區(qū)帶來更多精彩的Unreal Engine系列教程姊氓。希望到時(shí)可以看到你們的身影!:]