Adding a box component to our weapon 为我们的武器添加一个盒子组件
【资料图】
给weapon类添加一个boxcomponent组件
添加UBoxComponent 的class生命和头文件
新建Weapon类的构造函数
在构造函数中创建BoxComponet,并绑定在root组件上
打开UE,在武器的蓝图中,修改box的形状符合武器外观大小
Sweeping With Box Shapes盒子形状的扫地
给武器添加了两个sence组件来确定碰撞检测的起点和终点,使用盒体检测 box trace by channel
碰撞之后,在碰撞点绘制一个图形
使用角色Echo检测碰撞
需要设置武器忽略对pawn的检测
然后设置角色
Performing our Trace From Code
新建UBoxComponent组件
新建两个USceneComponent组件,用来标记起点和终点
创建weapon类中的beginPlay()方法
创建OnBoxOverlap()方法,用于box的碰撞检测,加上UFUNCTION(),避免无法在游戏中生效
OnBoxOverlap()方法参数与OnSphereOverlap相同
实现功能
解释了动态数组的原理
only trigger overlap events while attacking只在攻击时触发重叠事件
给攻击的蒙太奇动画添加打开碰撞和关闭碰撞的通知
然后在动画蓝图中,添加事件
在C++中,实现后面的SetWeaponCollision方法
首先需要在Weapon类中,新建一个可以返回Weaponbox的方法
然后设置WeaponBox在构造函数中,初始化碰撞类型为NoCollision
接着在Character类中,创建方法SetWeaponCollision()
最后用这个方法在动画蓝图中调用,并传入对应的参数就可以了
Using Interfaces to Handle Getting Hit使用接口处理被击中
Enemy Character Class敌人角色类别
新建Enemy类,继承自Character然后再C++中设置了碰撞预设的一些参数
Animations that Actually Move the Character真正移动角色的动画
介绍了一个插件
https://github.com/enziop/mixamo_converter
可以将mixamo中没有root骨骼的动画,添加上root骨骼
从mixamo上找到了对应的动画,下载blander,安装插件,将动画批量处理后导入UE
Using our hit interface使用我们的点击界面
尝试创建其他的debug形状,并且将其封装为宏
在接口类中,声明一个纯虚函数
在Enemy类中,继承接口类,然后重写GetHit()函数,实现在指定位置绘制一个球体的功能
然后再weapon.cpp中,在碰撞检测方法中,向接口GetHit()方法传入参数
编译之后,就可以在游戏中,在击中目标的位置 绘制一个球体了
Creating a Montage for Hit Reacts为Hit react创建蒙太奇
创建被击中的动画蒙太奇
Making the Enemy Stumble让敌人跌倒
在C++中,实现播放蒙太奇的逻辑
在Enemy.h中 声明 蒙太奇对象和方法
在方法中实现简单的逻辑
在Enemy.cpp的GetHit()中关联播放动画的方法
编译之后,在游戏中就可以实现效果了
在动画中,启用根运动,这样,角色在执行位移动画时,在游戏中就会有实际的位移
Angle Between Two Vectors两个向量夹角
用C++实现求集中点和目标朝向夹角的代码
这里用UKismetSystemLibrary,将目标朝向和被击中的方向绘制了出来
Another Advanced Vector Operation另一种高级矢量运算
自己添加的前后左右倒的逻辑
Choosing the Montage Section Based on theta根据theta选择蒙太奇部分
与上面的代码相同
Ignoring Actors we already hit忽略我们已经击中的actor
在Weapon类中,添加一个AActor的数组,用来存放需要忽略重叠的actor
然后我们在weapon的重叠事件逻辑中,在检测完成之后,将actor添加进入这个数组
然后在逻辑开始前,将这个数组里面的actor添加进入ActorsToIgnore中
然后我们回到Character类中,在动画通知碰撞检测关闭后,将这个数组清空,避免下次使用时失效
when the enemy is hit
添加一个metesoundsources
在Enemy类中,声明一个USoundBase的变量,并使其可以在蓝图和实例中编辑
包含头文件
#include "Kismet/GameplayStatics.h"
在GetHit方法中添加如下
编译之后在蓝图中,添加matesoundssources
就可以在游戏中,击中目标之后发出声音了
设置声音衰减 新建一个声音衰减设置
回到MeteSoundsSources中
Spawning Blood when the enemy is hit敌人被击中时产生血
Visual Effects
Cascade
Niagara
在Enemy类中,声明一个UParticleSystem变量,并且将其开放给蓝图和实例
在Enemy的GetHit方法中,使用UParticleSystem
编译之后,在UE中,添加粒子
执行游戏可以检查效果
Trail Visual Effects轨迹视觉效果
给武器添加粒子效果
打开AM_AttackMontage
新建一个通知轨道
添加一个尾部效果
点击trail,在右侧设置面板上,设置特效
然后来到角色的骨骼,在角色手部的位置添加两个插槽
将这两个插槽的名字设置进入特效中
保存后,进入游戏,挥动武器就会有拖尾效果了
Copyright © 2015-2023 非洲频道网版权所有 备案号:沪ICP备2022005074号-8 联系邮箱:58 55 97 3@qq.com