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

16_156~166Combat

2023-03-24 17:36 作者:俯瞰万千风景  | 我要投稿

156 Actor ComponentsActor组件

Creating Our Own Custom Components创建我们自己的自定义组件

创建自定义组件,可以专门包含一些功能,例如生命值,Gold,XP 等等

在UE中创建一个Actor Component的C++类


给这个类添加生命值属性

然后我们给Enemy类添加这个组件

编译之后就可以在UE中看到敌人有新添加的组件

157 Widget Components小工具组件

Creating a Health Bar for the Enemy为敌人创建一个健康条

创建一个UHealthBarComponent类,命名为HeathBarComponent //视频里面这里错了,应该是UHealthBarComponent 不是UWidgetComponent

然后先给Enemy类添加一个UHealthBarComponent组件,绑定在root根上(需要添加UMG模块,添加头文件)

//注:这里创建的也应该是UHealthBarComponent类,而不是UWidgetComponent

编译代码之后,就可以在UE中看到Enemy多了一个组件,将之前新建的HealthBar UI添加至组件

158 User Widget Class用户小工具类

C++ Class for our Health Bar Widget用于我们的健康栏小工具的C++类

创建一个UserWidget类,命名为HealthBar类

在HealthBar类中,新建UProgressBar对象,

编译之后,回到UE中,打开WBP_HealthBar,我们需要修改父类

修改3 ,为创建的HealthBar

这里C++类的名字应该与空间中原来默认的名字相同

否则C++将无法控制到这个进度条组件

159 Setting the health Percent设置健康百分比

Accessing the HealthBar UserWidget in C++在C++中访问健康条的用户小部件

在UHealthBarComponent中

在Enemy类中

编译之后,回到UE中执行,就可以看到在enemy类中,可以设置血条显示

160 Damage伤害

UE中内置了伤害方式

因为使用TakeDamage需要使用actor和一个controller,所以我们需要在装备武器的时候,将对应的信息传入Weapon类中

给Equip方法添加了两个传入参数


在方法中设置这两个参数

然后在Character类中,EPressKey方法中,传入

在UAttributeComponent类中,创建两个方法,用于更新血条进度 和 在受到伤害后更新血量

然后我们在武器命中方法中,使用UGameplayStatics::ApplyDamage()添加伤害

在Enemy中,使用TakeDamage,接受收到伤害的方法

编译代码

然后来到UE中,我们需要设置场景中Enemy的Health和MaxHealth


运行游戏,攻击敌人,可以看到血量减少

161 Custom Health Bars自定义健康条

Spicing up the HUD 为HUD增色

用自己的图片替换掉系统默认的进度条样式

162 Enemy Death Animations死亡动画

Animations for Enemy Death

从mixamo导入死亡动画,从blander转换一下 使其有root根动画

将转换好的动画导入UE,并创建一个Paladin_Death的动画蒙太奇,将动画加入AM中

一定要记得在编辑器里,编辑好蒙太奇动画后,需要去点一下那个清除!


163 EnemyDeath敌人的死亡

Deading Some Fools欺骗一些愚蠢的人

在Enemy中,新建蒙太奇变量,新建一个方法处理角色死亡

在UAttributeComponent中,添加一个方法判断角色生命值是否大于0

实现Die方法

然后在GetHit_Implementation方法中,将之前判断角色受击动画用if包含起来,先判断角色是否死亡

如果没有则处理受击事件(播放受击动画,扣除血量),否则处理死亡事件(播放死亡动画,处理Enemy的Actor消失)


164 Death Poses死亡姿势

Making the Enemy Stay Down!让敌人躺在地

将之前准备的死亡动画,最后一帧提取为新的动画


准备好之后,来到ABP_Paladin的动画蓝图

我们可以在动画蓝图事件中这么操作,让动画每一帧都去设置DeatPose的值,但是这样效率很低


所以我们删掉这些

我们创建一个Blueprint Thread safe Update Animation


获取对象变量信息

将Deathpose提升为变量

进入规则界面

设置Death里面的动画 使用Blend pose 加上 EDeathPose的枚举名称

前面的事件图表也是必要的

165 Polishing Enemy Death完善敌人的死亡

Finishing Touches on Enemy Death敌人之死的收尾工作

1 去掉Enemy的胶囊体碰撞

在Die方法中添加

2 在击中敌人后才显示血条,死亡后不显示

首先设置默认不显示血条


然后再GetHit方法中,设置true

死亡后把血条设置false

敌人死亡后,关闭SkeletaMesh的碰撞,避免死亡后尸体还是会被武器打中,继续播放死亡动画


3 设置敌人在一段时间没有被攻击后,血条隐藏

他的思路是,声明一个AActor变量,如果被攻击,则将攻击对象(玩家)复制给这个Actor

然后不停检测敌人与Actor的距离,如果超过XXX则隐藏血条


166 小结


16_156~166Combat的评论 (共 条)

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