嘿StackOverflow社区,我正在制作我的第一款游戏,但遇到了问题。这场比赛是为了躲避障碍物以达到关卡的目的。所以我的问题是,只要球越过障碍物,我就想发出“呜呜”的声音。我创建了一个不可见对象,该对象应该在球通过不可见对象时执行“呜呜”声。
这些是“不可见”对象上的设置:
如果查看图像,您会看到有一个包含以下代码行的“Woosh”脚本:
using UnityEngine;
public class Woosh : MonoBehaviour
{
void OnCollisionEnter(Collision collisionInfo)
{
if (collisionInfo.collider.tag == "Player")
{
FindObjectOfType<AudioManager>().Play("Woosh");
}
}
}
该代码应该使不可见的对象在与播放器碰撞时播放“Woosh”音频。但是,当我在游戏中尝试时,当我通过不可见的对象时,音频将永远无法播放。
为了给您提供信息,我确实有一个音频管理器,其中包含我到目前为止已实现的所有声音。可以在这里看到:
注意:所有其他声音均有效,但“Woosh”声音无效。
任何帮助表示赞赏!
提前致谢,
体重
最佳答案
评论还不够。
我想告诉您的是,您不能仅自动假设问题出在“哇”声。那只是可能出错的事情之一。您有以下代码:
public class Woosh : MonoBehaviour
{
void OnCollisionEnter(Collision collisionInfo)
{
if (collisionInfo.collider.tag == "Player")
{
FindObjectOfType<AudioManager>().Play("Woosh");
}
}
}
您的期望是,当调用
OnCollisionEnter
时,将播放“Woosh”声音。您说声音没有播放,所以您必须找出问题所在。这是我要检查的内容:OnCollisionEnter
方法上放置一个断点,以查看是否被调用。如果未调用,则问题出在其他地方。如果您没有调试器,则可以输出诸如“嘿,我到了!”之类的消息。告诉您OnCollisionEnter
函数实际上是被调用的。 OnCollisionEnter
,则需要检查collisionInfo.collider.tag
是否确实包含值“Player”。同样,使用某种输出函数来告诉您该变量中的内容。 collisionInfo.collider.tag == "Player"
,请检查对FindObjectOfType<AudioManager>
的调用是否返回期望值。 您可以分拆代码:
var mgr = FindObjectOfType<AudioManager>();
if (mgr == null)
{
// some error here. Maybe throw an exception.
}
else
{
// Make sure (somehow) that it's really the object you wanted
}
mgr.Play("Woosh");
Play
是否抛出任何异常? 我在这里要说明的一点是,调试涉及质疑所有假设,并进行测试以查看失败的地方。最好用调试器来完成,因为它使您可以逐步遍历代码以查看正在发生的事情。
如果您不知道如何使用调试器,那么现在就是学习的最佳时机。它将节省您数天的调试时间。
关于c# - 当一个物体经过另一个物体时如何发出声音?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51330833/