找回密码
 立即注册
查看: 365|回复: 0

虚幻4渲染编程(入门引擎篇)【第十四卷:完善对战】

[复制链接]
发表于 2022-9-1 22:30 | 显示全部楼层 |阅读模式
参考:
文章目录是课程的一个目录,所以这篇文章接着上一篇目录去写。
74、插值到敌人

我们现在角色攻击的方向稍有偏差之后,我们就无法击中敌人,所以为了更容易击中敌人,我们这里可以考虑在角色距离蜘蛛比较近的时候直接自动转向蜘蛛。
这里就是采用插值法。


我们在Main中加上上边三个。


然后初始化:




然后我们需要一个插值的对象,






然后我们就在Tick中每一帧去判断,如果需要的话进行插值。
那么关于插值,我们怎么操作:
首先需要获取到一个rotator,表示怎么从当前朝向变成指向目标位置的朝向:




我们利用插值就是让旋转的过程平滑一些。


当我们的攻击完成之后应该


因为我们实现的效果不是靠近了就转向,而是靠近了攻击时才会自动转向,这样攻击时正在转向,从而增大命中率。
75、敌人攻击延迟

当前敌人的攻击过于频繁,我们想给他加一下间隙。同时时间间隙是一个一定范围内随机的,


在Enemy中设置上这三个变量,初始化:


然后在AttackEnd的地方用计时器去操作:


但是这会带来一个问题,就是如果说你已经离开了蜘蛛,然后蜘蛛的计时器倒计时结束,这时候再进行攻击,就会很奇怪,所以我们可以再离开区域的时候,如果还有计时器在计时,那就给取消了。


76、受伤与死亡

我们现在双方的对战的动作等内容都做好了,但是被击打之后还没有加入血量变化的内容。


这里我们之前是直接设置成null,但是如果我们考虑到场景内同时有多个敌人,角色可能在脱离了当前敌人会同时进入另外一个敌人,甚至还没有脱离当前就会进入另外一个敌人的范围。
那么这时候脱离当前敌人可能会立刻把CombatTarget设置甚至是已经设置成另外的一个敌人,所以这里需要进行一个判断才可。


这里重写一下父类的TakeDamage函数,关于参数可以在文档中搜索AActor::TakeDamage。


这里调用该函数需要一个参数,我们准备好:(Enemy中)


然后调用ApplyDamage:


这里他的作用就是让Main去调用自己的TakeDamage。
然后回到蓝图中:


这里选择DamageType即可。现在就可以看到血条减少了。
那么接下来我们要做的就是死亡动画了,就是当血条没了的时候,应该死亡。
死亡动画,和我们的攻击动画是放在一个montage里面的。类似的我们只需要获取AnimInstance,然后播放。


对于敌人同样需要有TakeDamage:






然后这里我们在Enemy里面多搞一个状态:


然后我们在Die函数中进行设置:


并且我们把所有的碰撞都给取消掉。然后关于这个damage的调用,我们应该到weapon中,


然后这里的Instigator就是触发者,其实就是角色,那么我们可以在装备武器的时候来设置这个变量。


然后Apply:


然后设置一下武器的DamageTypeClass


这个时候运行,死亡动画啥的可以正常播放了,但是播放完之后又回到了idle动画了。


我们在死亡结束的时候加一个notify。




然后调用一下:


再加一个函数:


设置这个函数是为了,在死亡之后,我们不要去执行一些不该执行的功能,这个函数用来做死亡的判断:




然后加上Alive调用:






然后初始化一下状态:


现在运行就可以了,但是还有一点,就是死亡之后,往往过一会这个对象应该销毁,这样不占用内存。我们需要一个倒计时实现:


初始化一下DeathDelay。
然后函数:




然后倒计时的设置:


出错了:


这个可以重启解决。

他这里也有这个:


名字是EndAttack,然后


这个是AttackEnd。
77、敌人生命值

对于敌人的生命值和主角的是不一样的,因为敌人的生命值我们不能让他一直显示,而是只在特定的时间段显示。
我们一般是在战斗状态下才显示,那么对于战斗状态的判定,我们可以利用重叠的sphere来判断。




然后设置一波:




然后我们在Main中弄一个


用来表示是否是战斗状态的。初始化为false。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-9-22 01:08 , Processed in 0.161933 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表