【GAD翻译馆】VR100天教程:第13天在Unity中攻击敌人,生命值系统,和死亡动画
译者:刘鸿(lewis2012,251423807) 审校:王玥亭(玥亭)
欢迎回到VR的100天的第13天!上次我们创建敌方的动作,使用Nav Mesh Agent来帮助我们移动我们的敌人。
当敌人靠近玩家时,我们添加了一个触发碰撞器来帮助开始攻击动画。
最后,我们添加了一个网格碰撞器(mesh collider)到knight身上,所以当它在攻击动画期间碰到玩家时,我们可以启动伤害逻辑。
今天我们要继续执行我们玩家的射击逻辑,并修复玩家在与任何其他碰撞器接触后一直飘移的烦人的错误。
解决漂移的问题
我对这个问题的第一个猜测是,我们玩家的刚体部分一定是有问题的。。
如果我们记得,刚体是负责我们玩家在Unity中的物理引擎。
根据RigidBody的文档 ,任何与我们的玩家相撞的时刻,物理引擎将对我们施加速度。
在这一点上我们有两个选择:
1)任何碰撞后将速度(velocity )设置为0
2)使我们的drag 值更高
什么是drag ?我也没有真正了解它,但是在进行更多的研究之后,特别 是在Rigidbody2D.drag中阅读它, drag是一个物体需要多长时间才能减缓摩擦。具体来说,这个值越高,速度越快,对于我们来说越快慢下来。
我将 RigidBody中的drag值从0 切换 到5。
我不知道这个值是什么意思,但是在我们的速度从阻力的角度来看,我们的速度并没有因摩擦而减少,但是在我们加入了一个值之后,我们将开始慢慢减速。
回到游戏添加敌人射击
解决drag问题后,我们终于回到游戏的主要部分:射击我们的敌人。
将有2个地方,我们要添加我们的代码:EnemyHealth和EnemyMovement。
以下是我们添加的代码的新流程:
1)在Start()中,我们实例化了我们的Animator ,我们稍后会用到死亡动画
2)在TakeDamage()函数(从PlayerShootingController中调用)当敌人死亡时,我们调用Death()函数。
3)在Death()函数中,我们设置死亡触发器,使Knight播放死亡动画
接下来,我们需要快速更改EnemyMovement,以防止我们的Knight死亡后移动。
以下是代码流程:
在Start()中,我们获取了EnemyHealth脚本,以便我们可以访问knights的生命值。
在Update()中,如果knights死了,我们禁用Nav Mesh Agent,否则它会像正常一样继续行动。
现在,当我们玩游戏时,knights进入死亡状态,就像这样:
改进射击Mechanics
在这一点上,你可能会注意到一个问题。
好的,我知道有很多问题,但是我指的是两个细节问题。
当我们射击时,knight几乎立刻死亡
当我们射击时,我们并没有真正的敌人让我们感觉我们击中他们
所以我们要解决这些问题
添加设计延时
现在,每当Update()检测到我们的鼠标被按下时,我们总是在敌人的knight上射出raycast。
所以,让我们添加一个延迟到我们的Player Shooting Controller脚本。
这是我们添加的逻辑:
1)我们创建了我们的时间变量来确定在我们再次射击之前我们必须等待多久
2)在Update()中,如果我们等待足够长的时间,我们可以再次启动
3)旁注: 我决定将所有的射击代码移动到Shoot()函数中
4)在Shoot()函数中,因为玩家发射,我们将重置我们的计时器,并开始等待,直到我们可以再次射击。
添加玩家命中效果
设置游戏对象
当我们射击我们的敌人knight时候,没有什么事发生。敌人会忽略你,继续走向你。
我们可以做很多事情来使这更好:
1)添加声音效果
2)增加伤害效果
3)向后推敌人效果
4)以上所有
1)最后会被添加,2)可能会完成,但3)是我要实现的。
每次我们射击knight时候,我们都想把它推回去。这样一来,如果一群暴徒向我们蜂拥而来,我们就得设法先射击。
这个小功能花了很长的时间来解决。
问题
每当我们射击一个敌人时,我们想把它们推回去,然而,Nav Mesh Agent会覆盖我们尝试过的任何改变。具体来说,knight将继续前进。
解决方案
我们编写一些代码,可以改变Nav Mesh Agent的速度,以退回几个单位。
但是,当我这样做的时候,knight继续前进!
为什么?
这是一个很好的问题,我正在调查,希望明天找到一个解决方案。
第13天结束
今天第一次,我开始出现一个问题,一天中我无法解决。
当我们开始越来越深入的时候,我期望这样做会变得更加普遍。
就这样说,今天我们通过使用drag来解决玩家的漂移问题,当敌人生命值用完了播放死亡动画。
明天我会继续研究如何把敌人推回去。
希望在第14天见到你!或者当我能弄清楚这个倒退的问题!
访问 VR挑战100天的内容表
【版权声明】
已经询问原文作者,并获取原文作者翻译许可,译文获得授权。
联系原文作者JoshChanghttp://www.codingchronicles.com/