【GAD翻译馆】VR100天教程:第14天在Unity中完成攻击敌人和行走音效
译者:刘鸿(lewis2012,251423807) 审校:王玥亭(玥亭)
我们回到第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)小于1,knight减速
3.3)大于 1,knight被推回
添加声音效果
现在我们终于解决了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秒我们还在播放的动画。我们会添加逻辑来播放步行音效。
注意: GetCurrentAnimatorStateInfo(0)函数中的参数 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天,我决定加入敌人撞击声音和玩家射击声音。
访问 VR挑战100天的内容表
【版权声明】
已经询问原文作者,并获取原文作者翻译许可,译文获得授权。
联系原文作者JoshChanghttp://www.codingchronicles.com/