我正在尝试编写一个脚本,当你攻击敌人时会播放声音。
使用碰撞检测+碰撞器来检测碰撞,而不是使用Update函数,然后播放音频。
void OnCollisionEnter(Collision collision)
{
soundSource.Play();
}
如果是2D游戏,请使用
OnCollisionEnter2D
。
我无法让它播放声音,虽然它看到了音频源,但我的脚本不会将剪辑传递给它。
在Unity中,音频无法播放的原因有很多。您的声音不会播放不是因为您将其放在Update
函数中。它之所以不是Update
函数(正如一些人提到的那样),是因为您用if (!soundSource.isPlaying)
保护它,因此只有在第一个播放完成后才会再次播放。
Unity中音频无法播放的原因:(从可能性高到低)
1.未分配AudioClip
。
这是您的AudioClip
:
public AudioClip hurtSound
如果在编辑器或代码中未分配或初始化
hurtSound
,Unity不会抛出任何错误,只是不会播放声音。只需将音频拖到
hurtSound
插槽中,您就应该能听到声音。有时,音频引用会丢失,因此只需再次重复此步骤即可重新创建引用。
![enter image description here](https://istack.dev59.com/9bIGX.gif)
2.编辑器静音。如果编辑器被静音,它将不会有任何声音输出,但是构建应该有声音。检查并关闭编辑器的静音。
![enter image description here](https://istack.dev59.com/C7u1v.gif)
3.每帧播放声音。这个错误很常见,它导致AudioSource没有时间重复播放音频。
这个错误的例子:
private void Update()
{
soundSource.Play();
}
可能的解决方案:
在播放音频之前先检查它是否正在播放。(在这个问题的代码中已经这样做了,是正确的!)
private void Update()
{
if (!soundSource.isPlaying)
{
soundSource.Play();
}
}
4. AudioSource
所附加的GameObject已被销毁。
这种情况很常见。如果AudioSource
所附加的GameObject被销毁,音频将无法播放。
解决方法是将AudioSource
附加到不会被销毁的GameObject上。一个空GameObject就可以。
或者你可以播放音频,等待它播放完毕,然后再销毁它:
IEnumerator playAudio()
{
soundSource.Play();
while (soundSource.isPlaying)
yield return null;
Destroy(gameObject);
}
5. AudioSource
所附加的游戏对象已被停用。
如果拥有AudioSource
的游戏对象被停用,音频也会停止。不要停用AudioSource
游戏对象。请参见#4以获取可能的解决方法。
![enter image description here](https://istack.dev59.com/tqSHG.webp)
6.代码甚至没有执行。
您必须确保Play
代码正在执行。简单的Debug.Log
函数调用足以确定这一点。
private void Update()
{
if (!soundSource.isPlaying)
{
soundSource.clip = hurtSound;
soundSource.Play();
Debug.Log("Played");
}
}
![enter image description here](https://istack.dev59.com/LUgPB.webp)
如果您在“控制台”选项卡中看不到该日志,则代码未执行。
A.脚本未附加到GameObject上。请将其附加到一个GameObject上:
![enter image description here](https://istack.dev59.com/7nNDy.gif)
B.脚本所附加的游戏对象未激活。请从编辑器中激活它:
![enter image description here](https://istack.dev59.com/Z9WvX.gif)
C.脚本未启用。请启用它:
![enter image description here](https://istack.dev59.com/sczkf.gif)
7. AudioSource
已静音或音量为 0
。
![enter image description here](https://istack.dev59.com/VG565.gif)
8. {{AudioListener}}组件不存在。这很不可能,因为它会自动附加到您的相机上。检查是否被错误删除,然后重新将其附加到相机上。它必须附加到相机而不是任何其他对象。
![enter image description here](https://istack.dev59.com/AwavL.gif)
9.音频质量差。更换另一个音频。
10.Bug(程序漏洞)。前往“帮助” ---> “报告漏洞”菜单并提交漏洞报告。
如果上述所有方法都失败了,可以尝试以下操作。这很少见,但可能会在进行大型操作系统更新时发生。
Update
不是每一帧都会执行吗? - Charleh