我正在尝试编写一个脚本,当你击中敌人时它会播放
声音
使用碰撞检测+碰撞器代替Update函数检测命中然后播放音频:
void OnCollisionEnter(Collision collision)
{
soundSource.Play();
}
如果是 2D 游戏,请改用OnCollisionEnter2D。
我无法让它播放它看到音频源的声音,但我的
脚本不会将剪辑传递给它。
很多音频不能在 Unity 中播放的原因有很多。你的声音不会播放不,因为你把它放在Update 函数中。它不是像某些人提到的Update 函数的原因是因为你用if (!soundSource.isPlaying) 保护它所以它只会仅在第一个播放完毕时再播放一次。
在 Unity 中无法播放音频的原因:(从可能到不太可能)
1。AudioClip 未分配。
这是你的音频剪辑
public AudioClip hurtSound;
如果hurtSound 未在编辑器中或通过代码分配或初始化,Unity 不会抛出任何错误。它根本不会播放。
只需将音频拖到您的hurtSound 插槽,您就可以听到声音。有时,音频参考会丢失,因此只需再次重复此步骤即可重新创建参考。
2.Editor 已静音。如果编辑器静音,则不会发出声音,但构建应该有声音。检查并禁用编辑器上的静音。
3.每帧播放声音。这个错误并不少见,它会导致 AudioSource 没有时间一遍又一遍地播放音频。
这个错误的例子:
private void Update()
{
soundSource.Play();
}
可能的修复:
在播放之前先检查音频是否正在播放。(在这个问题的代码中这样做是正确的!)
private void Update()
{
if (!soundSource.isPlaying)
{
soundSource.Play();
}
}
4.AudioSource 所附加的 GameObject 已被销毁。
这也很常见。如果 AudioSource 所附加的 GameObject 被破坏,音频将无法播放。
解决方法是将AudioSource 附加到不会破坏的游戏对象上。一个空的 GameObject 很好。
或者你可以播放音频,等待它播放完然后销毁它:
IEnumerator playAudio()
{
//Play Audio
soundSource.Play();
//Wait until it's done playing
while (soundSource.isPlaying)
yield return null;
//Now, destroy it
Destroy(gameObject);
}
5.AudioSource 所附加的 GameObject 已停用。
如果具有Audiosource 的游戏对象被停用,音频也会停止。不要停用AudioSource GameObject。请参阅 #4 了解可能的解决方法。
6。代码甚至没有执行。
您必须确保Play 代码甚至正在执行。一个简单的Debug.Log 函数调用就足以确定这一点。
private void Update()
{
if (!soundSource.isPlaying)
{
soundSource.clip = hurtSound;
soundSource.Play();
Debug.Log("Played");
}
}
如果您在控制台选项卡中看不到该日志,则代码未执行。
A.Script 未附加到游戏对象。将其附加到 GameObject:
B. 脚本附加到的游戏对象不是活动的。从编辑器激活它:
C.脚本未启用。启用它:
7.AudioSource 静音或音量为0。
8.AudioListener 组件不存在。这不太可能,因为它会自动连接到您的相机。检查是否被误删,然后重新安装到相机上。它必须连接到相机而不是任何其他对象。
9.坏音频。替换为其他音频。
10.错误。转到帮助 ---> 报告错误.. 菜单并提交错误报告。
如果上述一切都失败了,这就是该怎么办。这不太可能是问题,但在有大的操作系统更新时可能会发生。