当用户拖动 2D 游戏对象时,我正在尝试播放声音。
游戏对象必须播放许多声音,因此我以编程方式创建音频源并通过检查器分配剪辑。
public class Card: Monobehavior, IDraggable {
public AudioClip tokenGrabClip;
public AudioClip tokenReleaseClip;
public AudioSource tokenGrab;
public AudioSource tokenRelease;
public AudioSource TokenGrab {
get{ return tokenGrab; }
}
public virtual void Start() {
tokenGrab = AddAudio (tokenGrabClip, false, false, 1f);
tokenRelease = AddAudio (tokenReleaseClip, false, false, 1f);
}
public virtual AudioSource AddAudio(AudioClip clip, bool isLoop, bool isPlayAwake, float vol) {
AudioSource newAudio = gameObject.AddComponent<AudioSource>();
newAudio.clip = clip;
newAudio.loop = isLoop;
newAudio.playOnAwake = isPlayAwake;
newAudio.volume = vol;
return newAudio;
}
}
这将为每个
Card
类型的游戏对象创建两个音频源。在我的游戏中。现在在我的游戏管理器中,我只是尝试播放声音......
void CheckDragStart(GameObject go, Draggable d) {
if (go.GetComponent<Card> () != null) {
print("check drag start");
go.GetComponent<Card> ().TokenGrab.Play ();
}
}
没有声音播放,但我可以看到我的控制台显示“检查拖动开始消息”。
知道我做错了什么吗?我可以在第一个代码块中使用我的方法看到分配给我的游戏对象的音频源,但我的音频剪辑没有分配给它们......
最佳答案
这不可能是游戏对象,GetComponent<Card>()
或 TokenGrab
是 null
.如果其中任何一个为空,您将获得 NullException
错误。我正在排除这些。
查看您的代码,这些是您的音频无法播放的可能原因。从很可能到最少订购。
1 .您的AudioClip
不是从编辑器分配的。
检查这两个变量是否都是从编辑器中分配的。
public AudioClip tokenGrabClip;
public AudioClip tokenReleaseClip;
这必须为每个
Card
完成。附加到场景中任何游戏对象的脚本。你 不会如果它们未分配或为空,则会出现任何错误。简直是不会玩。
2 .您的
Card
脚本及其附加的游戏对象在 Play()
之后被销毁叫做。尝试在您拥有 Destroy
的任何地方发表评论功能。再试一次。如果问题得到解决,您必须通过将 AudioSource 移动到不需要销毁的空 GameObject 来解决此问题。
关于c# - Unity AudioSource 无法播放剪辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42356523/