我正试图编写一个脚本,当你击中敌人时,它会播放声音,问题是我不能让它播放声音,它看到音频源,但我的脚本不会将剪辑传递给它。
下面是我目前拥有的代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Audio;
public class makeanoise : MonoBehaviour
{
public AudioClip hurtSound;
public AudioSource soundSource;
private void Update()
{
if (!soundSource.isPlaying)
{
soundSource.clip = hurtSound;
soundSource.Play();
}
}
}
你怎么让音频源播放声音?因为连我的队友都不知道要这么做
6条答案
按热度按时间l2osamch1#
我正在编写一个脚本当你击中敌人时会发出声音
使用碰撞检测+碰撞器而不是更新功能来检测命中,然后播放音频:
如果是2D游戏,则使用
OnCollisionEnter2D
。我无法让它播放声音,它看到音频源,但我的脚本不会将剪辑传递给它。
音频不能在Unity中播放的原因有很多。你的声音不能播放不是因为你把它放在
Update
函数中。它不是Update
函数的原因是因为你用if (!soundSource.isPlaying)
保护了它,所以只有当第一个正在播放时它才会再次播放。无法在Unity中播放音频的原因:(从可能到不可能)
1。
AudioClip
未分配。这是您的音频剪辑
如果
hurtSound
没有在编辑器中或通过代码赋值或初始化,Unity不会抛出任何错误,它只是不播放。只需将音频拖到您的
hurtSound
插槽中,您应该可以听到声音。有时,音频参考丢失,所以只需再次重复此步骤以重新创建参考。2.编辑器被静音。如果编辑器被静音,它将不会发出任何声音,但构建应该有声音。检查并禁用编辑器上的静音。
3.每帧播放一次声音。这种错误并不少见,它会导致AudioSource没有时间反复播放音频。
播放前先检查音频是否正在播放。(在此问题的代码中执行了此操作,正确!)
4.
AudioSource
所连接的游戏对象已被破坏。这也是常见的。如果AudioSource
所连接的游戏对象已被破坏,音频将无法播放。修正是将
AudioSource
附加到不破坏的游戏对象上。一个空的游戏对象是可以的。或者,您可以播放音频,等待它播放完毕,然后销毁它:
5。
AudioSource
所连接的游戏对象已停用。如果具有
Audiosource
的游戏对象被停用,音频也会停止。不要停用AudioSource
游戏对象。有关可能的解决方法,请参阅**#4**。6。代码甚至没有执行。
您必须确保
Play
代码正在执行,一个简单的Debug.Log
函数调用就足以确定这一点。如果在Console选项卡中看不到该日志,则代码没有执行。
7。
AudioSource
已静音或音量为0
。8。
AudioListener
组件不存在。这是非常不可能的,因为它是自动连接到您的相机。检查它是否被错误地删除,然后重新连接到相机。它必须连接到相机,而不是任何其他对象。9.音频错误。请替换为其他音频。
10. Bug。转到 * 帮助 * ---〉* 报告错误.. * 菜单,然后提交错误报告。
这就是如果上面的一切都失败了该怎么做。这不太可能是问题所在,但在操作系统大更新时可能会发生。
bgibtngc2#
你需要在场景中有一个AudioListener,并且还要检查3D声音设置,最常见的事情是将AudioListener连接到主摄像机。
检查场景中是否存在AudioListener以及AudioSource的设置
x759pob23#
还有一件事,可以导致它的音高设置-我有我的0 -我可以看到音频播放在混音器-但没有声音会听到-移动音高回到1 -一切工作良好。
nom7f22z4#
只是为了帮助其他人,像ash a提到的音高设置实际上可以导致一些奇怪的错误,我的音频源的音高被设置为-1,因为我有一个机械,点增加sfx音高通过点击东西连续。使用
AudioSource.PlayClip
在点允许声音播放,但我然后删除AudioSource.PlayClipAtPoint
使用缓存的AudioSource
,确保球场初始化在1F时,我想游戏的声音发挥和所有工作的预期。puruo6ea5#
我通过在主摄像头的位置播放
AudioSource.clip
来解决这个问题,传入一个x
,y
和z
都等于0
的Vector3
来播放声音,但声音更安静,我从来没有让AudioSource.Play()
工作。s71maibg6#
@Programmer提供的检查表帮助我排除了其他可能性,找到了另一个需要考虑的潜在问题...
如果您的音频在Unity编辑器中工作正常,但在构建版本中却不能正常工作,则可能是您使用
OnValidate()
将对AudioSource
组件的引用存储在private
字段中。如何确认/修复:
1.启用“开发版本”,以便版本报告问题
1.当您尝试播放或以其他方式访问
AudioSource
时,构建日志显示NullReferenceException: Object reference not set to an instance of an object
。1.使用
OnValidate()
将[SerializeField]
添加到任何私有变量集,以确保引用被序列化: