欢迎光临散文网 会员登陆 & 注册

13_P122~P140WeaponMechanics

2023-03-23 09:15 作者:俯瞰万千风景  | 我要投稿

122 Collision Box 碰撞盒

Adding a box component to our weapon 为我们的武器添加一个盒子组件

给weapon类添加一个boxcomponent组件

添加UBoxComponent 的class生命和头文件

新建Weapon类的构造函数


在构造函数中创建BoxComponet,并绑定在root组件上


打开UE,在武器的蓝图中,修改box的形状符合武器外观大小

123 Tracing跟踪

Sweeping With Box Shapes盒子形状的扫地

给武器添加了两个sence组件来确定碰撞检测的起点和终点,使用盒体检测 box trace by channel

碰撞之后,在碰撞点绘制一个图形

使用角色Echo检测碰撞

需要设置武器忽略对pawn的检测

然后设置角色

124 Box Trace in C++用C++实现碰撞

Performing our Trace From Code

新建UBoxComponent组件


新建两个USceneComponent组件,用来标记起点和终点

创建weapon类中的beginPlay()方法

创建OnBoxOverlap()方法,用于box的碰撞检测,加上UFUNCTION(),避免无法在游戏中生效

OnBoxOverlap()方法参数与OnSphereOverlap相同

实现功能


125 Dynamic Arrays动态数组

解释了动态数组的原理


126 Disabling Box collision禁止箱子碰撞

only trigger overlap events while attacking只在攻击时触发重叠事件

给攻击的蒙太奇动画添加打开碰撞和关闭碰撞的通知

然后在动画蓝图中,添加事件

在C++中,实现后面的SetWeaponCollision方法

首先需要在Weapon类中,新建一个可以返回Weaponbox的方法

然后设置WeaponBox在构造函数中,初始化碰撞类型为NoCollision


接着在Character类中,创建方法SetWeaponCollision()

最后用这个方法在动画蓝图中调用,并传入对应的参数就可以了

127 Unreal Interfaces虚幻的接口

Using Interfaces to Handle Getting Hit使用接口处理被击中

128 Enemies敌人

Enemy Character Class敌人角色类别

新建Enemy类,继承自Character然后再C++中设置了碰撞预设的一些参数


129 Root Motion Animations根运动动画

Animations that Actually Move the Character真正移动角色的动画

介绍了一个插件

https://github.com/enziop/mixamo_converter

可以将mixamo中没有root骨骼的动画,添加上root骨骼

从mixamo上找到了对应的动画,下载blander,安装插件,将动画批量处理后导入UE


130 mplementing Interfaces实现接口

Using our hit interface使用我们的点击界面


尝试创建其他的debug形状,并且将其封装为宏


在接口类中,声明一个纯虚函数


在Enemy类中,继承接口类,然后重写GetHit()函数,实现在指定位置绘制一个球体的功能

然后再weapon.cpp中,在碰撞检测方法中,向接口GetHit()方法传入参数

编译之后,就可以在游戏中,在击中目标的位置 绘制一个球体了


131 Hit React Montage 击中React蒙太奇

Creating a Montage for Hit Reacts为Hit react创建蒙太奇

创建被击中的动画蒙太奇

132 Playing the Hit React Montage播放Hit React蒙太奇

Making the Enemy Stumble让敌人跌倒

在C++中,实现播放蒙太奇的逻辑

在Enemy.h中 声明 蒙太奇对象和方法

在方法中实现简单的逻辑

在Enemy.cpp的GetHit()中关联播放动画的方法

编译之后,在游戏中就可以实现效果了

在动画中,启用根运动,这样,角色在执行位移动画时,在游戏中就会有实际的位移

133 Dot Product点积

Angle Between Two Vectors两个向量夹角


用C++实现求集中点和目标朝向夹角的代码

这里用UKismetSystemLibrary,将目标朝向和被击中的方向绘制了出来

134 Cross Product叉积

Another Advanced Vector Operation另一种高级矢量运算

自己添加的前后左右倒的逻辑

135 Directional Hit Reactions定向命中反应

Choosing the Montage Section Based on theta根据theta选择蒙太奇部分

与上面的代码相同

136 One Hit Per Swing每挥杆一击

Ignoring Actors we already hit忽略我们已经击中的actor

在Weapon类中,添加一个AActor的数组,用来存放需要忽略重叠的actor

然后我们在weapon的重叠事件逻辑中,在检测完成之后,将actor添加进入这个数组

然后在逻辑开始前,将这个数组里面的actor添加进入ActorsToIgnore中

然后我们回到Character类中,在动画通知碰撞检测关闭后,将这个数组清空,避免下次使用时失效

137 Hit SoundsPlaying a Sound 撞击的声音

when the enemy is hit

添加一个metesoundsources


在Enemy类中,声明一个USoundBase的变量,并使其可以在蓝图和实例中编辑

包含头文件

#include "Kismet/GameplayStatics.h"

在GetHit方法中添加如下

编译之后在蓝图中,添加matesoundssources

就可以在游戏中,击中目标之后发出声音了


设置声音衰减 新建一个声音衰减设置

回到MeteSoundsSources中

138 Hit Particles打击粒子

Spawning Blood when the enemy is hit敌人被击中时产生血

Visual Effects

Cascade

Niagara


在Enemy类中,声明一个UParticleSystem变量,并且将其开放给蓝图和实例

在Enemy的GetHit方法中,使用UParticleSystem

编译之后,在UE中,添加粒子

执行游戏可以检查效果

139 Weapon Trails武器追踪

Trail Visual Effects轨迹视觉效果

给武器添加粒子效果

打开AM_AttackMontage

新建一个通知轨道

添加一个尾部效果

点击trail,在右侧设置面板上,设置特效

然后来到角色的骨骼,在角色手部的位置添加两个插槽

将这两个插槽的名字设置进入特效中

保存后,进入游戏,挥动武器就会有拖尾效果了


140小结

13_P122~P140WeaponMechanics的评论 (共 条)

分享到微博请遵守国家法律