13_P122~P140WeaponMechanics
122?Collision Box?碰撞盒
Adding a box component to our weapon?為我們的武器添加一個(gè)盒子組件
給weapon類(lèi)添加一個(gè)boxcomponent組件
添加UBoxComponent 的class生命和頭文件
新建Weapon類(lèi)的構(gòu)造函數(shù)

在構(gòu)造函數(shù)中創(chuàng)建BoxComponet,并綁定在root組件上

打開(kāi)UE,在武器的藍(lán)圖中,修改box的形狀符合武器外觀大小

123?Tracing跟蹤
Sweeping With Box Shapes盒子形狀的掃地
給武器添加了兩個(gè)sence組件來(lái)確定碰撞檢測(cè)的起點(diǎn)和終點(diǎn),使用盒體檢測(cè) box trace by channel
碰撞之后,在碰撞點(diǎn)繪制一個(gè)圖形

使用角色Echo檢測(cè)碰撞
需要設(shè)置武器忽略對(duì)pawn的檢測(cè)

然后設(shè)置角色

124?Box Trace in C++用C++實(shí)現(xiàn)碰撞
Performing our Trace From Code
新建UBoxComponent組件

新建兩個(gè)USceneComponent組件,用來(lái)標(biāo)記起點(diǎn)和終點(diǎn)

創(chuàng)建weapon類(lèi)中的beginPlay()方法
創(chuàng)建OnBoxOverlap()方法,用于box的碰撞檢測(cè),加上UFUNCTION(),避免無(wú)法在游戲中生效
OnBoxOverlap()方法參數(shù)與OnSphereOverlap相同
實(shí)現(xiàn)功能
125?Dynamic Arrays動(dòng)態(tài)數(shù)組
解釋了動(dòng)態(tài)數(shù)組的原理


126?Disabling Box collision禁止箱子碰撞
only trigger overlap events while attacking只在攻擊時(shí)觸發(fā)重疊事件
給攻擊的蒙太奇動(dòng)畫(huà)添加打開(kāi)碰撞和關(guān)閉碰撞的通知

然后在動(dòng)畫(huà)藍(lán)圖中,添加事件

在C++中,實(shí)現(xiàn)后面的SetWeaponCollision方法
首先需要在Weapon類(lèi)中,新建一個(gè)可以返回Weaponbox的方法
然后設(shè)置WeaponBox在構(gòu)造函數(shù)中,初始化碰撞類(lèi)型為NoCollision
接著在Character類(lèi)中,創(chuàng)建方法SetWeaponCollision()
最后用這個(gè)方法在動(dòng)畫(huà)藍(lán)圖中調(diào)用,并傳入對(duì)應(yīng)的參數(shù)就可以了
127?Unreal Interfaces虛幻的接口
Using Interfaces to Handle Getting Hit使用接口處理被擊中
128?Enemies敵人
Enemy Character Class敵人角色類(lèi)別
新建Enemy類(lèi),繼承自Character然后再C++中設(shè)置了碰撞預(yù)設(shè)的一些參數(shù)
129?Root Motion Animations根運(yùn)動(dòng)動(dòng)畫(huà)
Animations that Actually Move the Character真正移動(dòng)角色的動(dòng)畫(huà)
介紹了一個(gè)插件
https://github.com/enziop/mixamo_converter
可以將mixamo中沒(méi)有root骨骼的動(dòng)畫(huà),添加上root骨骼
從mixamo上找到了對(duì)應(yīng)的動(dòng)畫(huà),下載blander,安裝插件,將動(dòng)畫(huà)批量處理后導(dǎo)入U(xiǎn)E
130?mplementing Interfaces實(shí)現(xiàn)接口
Using our hit interface使用我們的點(diǎn)擊界面
嘗試創(chuàng)建其他的debug形狀,并且將其封裝為宏
在接口類(lèi)中,聲明一個(gè)純虛函數(shù)
在Enemy類(lèi)中,繼承接口類(lèi),然后重寫(xiě)GetHit()函數(shù),實(shí)現(xiàn)在指定位置繪制一個(gè)球體的功能
然后再weapon.cpp中,在碰撞檢測(cè)方法中,向接口GetHit()方法傳入?yún)?shù)

編譯之后,就可以在游戲中,在擊中目標(biāo)的位置 繪制一個(gè)球體了
131?Hit React Montage?擊中React蒙太奇
Creating a Montage for Hit Reacts為Hit react創(chuàng)建蒙太奇
創(chuàng)建被擊中的動(dòng)畫(huà)蒙太奇

132?Playing the Hit React Montage播放Hit React蒙太奇
Making the Enemy Stumble讓敵人跌倒
在C++中,實(shí)現(xiàn)播放蒙太奇的邏輯
在Enemy.h中 聲明 蒙太奇對(duì)象和方法

在方法中實(shí)現(xiàn)簡(jiǎn)單的邏輯

在Enemy.cpp的GetHit()中關(guān)聯(lián)播放動(dòng)畫(huà)的方法

編譯之后,在游戲中就可以實(shí)現(xiàn)效果了
在動(dòng)畫(huà)中,啟用根運(yùn)動(dòng),這樣,角色在執(zhí)行位移動(dòng)畫(huà)時(shí),在游戲中就會(huì)有實(shí)際的位移

133?Dot Product點(diǎn)積
Angle Between Two Vectors兩個(gè)向量夾角
用C++實(shí)現(xiàn)求集中點(diǎn)和目標(biāo)朝向夾角的代碼
這里用UKismetSystemLibrary,將目標(biāo)朝向和被擊中的方向繪制了出來(lái)

134?Cross Product叉積
Another Advanced Vector Operation另一種高級(jí)矢量運(yùn)算


自己添加的前后左右倒的邏輯

135?Directional Hit Reactions定向命中反應(yīng)
Choosing the Montage Section Based on theta根據(jù)theta選擇蒙太奇部分
與上面的代碼相同
136?One Hit Per Swing每揮桿一擊
Ignoring Actors we already hit忽略我們已經(jīng)擊中的actor
在Weapon類(lèi)中,添加一個(gè)AActor的數(shù)組,用來(lái)存放需要忽略重疊的actor

然后我們?cè)趙eapon的重疊事件邏輯中,在檢測(cè)完成之后,將actor添加進(jìn)入這個(gè)數(shù)組
然后在邏輯開(kāi)始前,將這個(gè)數(shù)組里面的actor添加進(jìn)入ActorsToIgnore中

然后我們回到Character類(lèi)中,在動(dòng)畫(huà)通知碰撞檢測(cè)關(guān)閉后,將這個(gè)數(shù)組清空,避免下次使用時(shí)失效

137?Hit SoundsPlaying a Sound?撞擊的聲音
when the enemy is hit
添加一個(gè)metesoundsources

在Enemy類(lèi)中,聲明一個(gè)USoundBase的變量,并使其可以在藍(lán)圖和實(shí)例中編輯

包含頭文件
#include "Kismet/GameplayStatics.h"
在GetHit方法中添加如下

編譯之后在藍(lán)圖中,添加matesoundssources
就可以在游戲中,擊中目標(biāo)之后發(fā)出聲音了
設(shè)置聲音衰減 新建一個(gè)聲音衰減設(shè)置

回到MeteSoundsSources中

138?Hit Particles打擊粒子
Spawning Blood when the enemy is hit敵人被擊中時(shí)產(chǎn)生血
Visual Effects
Cascade
Niagara
在Enemy類(lèi)中,聲明一個(gè)UParticleSystem變量,并且將其開(kāi)放給藍(lán)圖和實(shí)例

在Enemy的GetHit方法中,使用UParticleSystem

編譯之后,在UE中,添加粒子

執(zhí)行游戲可以檢查效果
139?Weapon Trails武器追蹤
Trail Visual Effects軌跡視覺(jué)效果
給武器添加粒子效果
打開(kāi)AM_AttackMontage
新建一個(gè)通知軌道
添加一個(gè)尾部效果


點(diǎn)擊trail,在右側(cè)設(shè)置面板上,設(shè)置特效

然后來(lái)到角色的骨骼,在角色手部的位置添加兩個(gè)插槽

將這兩個(gè)插槽的名字設(shè)置進(jìn)入特效中

保存后,進(jìn)入游戲,揮動(dòng)武器就會(huì)有拖尾效果了