0评论

【GAD翻译馆】VR100天教程:第14天在Unity中完成攻击敌人和行走音效

Gad-VR 2017-09-04 108浏览

译者:刘鸿(lewis2012251423807     审校:王玥亭(玥亭)


我们回到第14天。我终于在第13天解决了令人讨厌的问题(第13天教程中我们对敌人进行射击时,敌人并不会被推回)。

后来,我决定用一些音效来让这个游戏变得更生动一些。

毫不迟疑,让我们开始吧!

 

添加玩家命中效果(第2部分)

经过长时间的调查,我发现我使用的Brute运行动画会自然地会移动角色的位置。

解决方案

在最终搜索unity animation prevents movement 后,我发现StackOverflow上的答案。

animator中,禁用 Apply Root Motion,然后我们必须自己使用移动逻辑(我们已经有了)

Knock回退代码

一旦我们禁用了 Apply Root Motion。我们依靠我们的代码来移动我们的Knock

我们需要做的第一件事是更新我们的  PlayerShootingController  脚本来调用Knock回退代码:

最大的变化是我们得到了我们的  EnemyMovement  脚本,然后调用我们还没有实现的KnockBack()函数。

一旦我们有了这个代码,我们需要   EnemyMovement  脚本中实现  KnockBack()。

代码如下:

以下是代码的思路:

1)当我们的射击代码击中敌人时,我们称之为  KnockBack()  ,函数将速度设置为knight后方向,从而产生被击退的错觉。

2)这只是暂时的,因为我们的Nav Mesh Agent会在下一次更新()中返回并移动我们的Knight 

3)这就是KnockBackForce对速度的影响

3.1)等于1时,knight在射击时保持原位

3.2)小于1knight减速

3.3)大于 1knight被推回

 

添加声音效果

现在我们终于解决了knockback (退回)问题,我们继续。

在这一点上,玩游戏似乎是平淡无奇的。你知道什么可以让事情更有趣吗?声音特效!

我回到了Unity Asset Store,专门找到音效资产:

1)玩家射击音效

2)玩家行走音效

3)玩家击中音效

4)敌人击中音效

5)敌人奔跑音效

6)敌人攻击音效

随机搜索Unity,我发现  Actions SFX Vocal Kit  包含了我们所需要的一切。太棒了!

一旦我们已经完成下载并将SFX导入我们的Unity项目,我们将开始使用它们。

 

添加敌人击中声音效果
添加脚本

我们要做的第一件事是我们需要将我们的Male_Hurt 音频剪辑添加  到我们的Knight上。

通常,我们需要为我们的Knight添加音频源组件。不过,在此之前,让我们回顾一下:我们的Knight需要播放什么声音?

撞击音效

行走音效

攻击声音

如果我们将一个音频源(AudioSources)组件添加到Knight对象上,并使用它来播放声音,会发生什么,一个声音将立即被另一个声音替换。我们不想看到这样的效果。

我们可以做的是创建多个音频源(AudioSources)组件,然后手动将它们附加到我们的脚本上,但是如果我们决定需要更多类型的声音,那么这不是很可扩展。

相反,我发现这个极好的方法  在单个GameObject上添加多个音频源

这个想法不是手动创建多个组件,然后将其附加到脚本组件,为什么不在代码中创建组件?

这是我做的:

有很多代码被添加,但是我尽可能多地分开它们,以便于理解它们。

这是代码思路:

1)在Start()中,我们实例化了新的私有字段,特别是我们的新变量:

_walkingAudioSource

_time

2)我们   Start()调用  SetupSound()  并创建一个AudioSource的新实例,只有当游戏开始时才会显示,我们将音量设置为0.2f

3)在  Update()中,如果在0.2秒我们还在播放的动画。我们会添加逻辑来播放步行音效。

注意:  GetCurrentAnimatorStateInfo0)函数中的参数  0指的是索引0层,我不太确定为什么,但在 what people use中。从那里我们可以检查knight 的状态。

4)在  PlayRandomFootstep()中,我们随机选择我们下载的步行声音片段并播放它

一旦我们有了这些,我们需要添加音频剪辑。

转到EnemyMovement脚本  ,然后在Walking Clips 下将size更改为4.我们可以做到这一点,因为 Walking Clips是一个剪辑数组。

然后将Footstep01-04音效添加到每个Element槽中。如果尚未设置Walking Delay,请确保Walking Delay 设置为0.4

运行游戏,你会看到敌人现在正在运行声音!

如果你使用不同的动画,你可能需要更改Walking Delay以匹配动画,但在高级别上,你必须执行此操作!

每当knight 攻击我们时,声音将停止,并且每当knight 恢复运行后(借助于一些射击回退),运行的声音将恢复!

 

结论

今天在第14天,我们发现knight 回退的问题与我们使用的根动画有关。

禁用后,我们可以开始添加我们的回退代码,没有任何问题。

随着回退实现,我们的下一件事是声音效果。我们在Unity资产商店找到了一些资产,然后我们将它们添加到了我们的敌人上,这是我们第一次通过代码创建了一个组件。

我在这一点上的关注是当我们开始产生很多knight 时会发生什么?会造成不愉快的经历吗?

无论哪种方式,明天再来到第15天,我决定加入敌人撞击声音和玩家射击声音。

 

阅读第 14天原始文章

访问 VR挑战100的内容表

【版权声明】

已经询问原文作者,并获取原文作者翻译许可,译文获得授权。

联系原文作者JoshChanghttp://www.codingchronicles.com/