【发布时间】:2018-07-13 18:16:57
【问题描述】:
嘿 StackOverflow 社区,我正在制作我的第一款游戏,但遇到了问题。游戏是关于一个球躲避障碍物以达到关卡的终点。所以我的问题是每当球通过障碍物时我想实现“Woosh”声音。我创建了一个不可见的对象,它应该在球通过不可见对象时执行“Woosh”声音。
如果您查看图像,您会发现有一个“Woosh”脚本,其中包含以下代码行:
using UnityEngine;
public class Woosh : MonoBehaviour
{
void OnCollisionEnter(Collision collisionInfo)
{
if (collisionInfo.collider.tag == "Player")
{
FindObjectOfType<AudioManager>().Play("Woosh");
}
}
}
这段代码应该让不可见对象在与播放器发生碰撞时播放“Woosh”音频。但是,当我在游戏中尝试时,当我通过不可见的对象时,音频永远不会播放。
供您参考,我确实有一个音频管理器,其中包含我迄今为止实现的所有声音。可以在这里看到:
注意:所有其他声音都可以工作,但“Woosh”声音无效。
感谢任何帮助!
提前致谢, E.W
【问题讨论】:
-
您确认您的
OnCollisionEnter方法被调用,并且标签等于“玩家”吗?你知道FindObjectOfType是否真的返回一个值吗? -
另外,你确认你的“Woosh”声音会播放吗?如果您用“Woosh”替换您的其他声音呼叫之一,它会播放吗?在这种情况下,您必须做的是检查导致播放声音的所有内容。不要只是自动假设声音或其设置是问题所在。
-
嗨,吉姆,很抱歉我离开了一段时间。所以我尝试用另一种声音替换音频管理器中的“Woosh”声音,但这些声音都不起作用。另外,你能解释一下你在第一条评论中的意思吗?我是 Unity 的新手,这就是为什么。暂时我会寻找解决方案。再次感谢!
-
Jim 我想你可能已经找到了我的问题的答案,但我还没有完全弄清楚。所以基本上我将“void OnCollisionEnter(Collision collisionInfo)”更改为“(void OnCollisionEnter(Woosh collisionInfo)”。希望这是朝着正确方向迈出的一步?无论如何,右侧脚本中的“collisionInfo.collider”部分已用红色下划线:“if (collisionInfo.collider.tag == “玩家”)
-
您是否在
OnCollisionEnter上设置了断点,或者弹出了一条消息,或者任何东西 可以向您证明正在调用该方法?您是否确定if语句的计算结果为true,并且代码实际上调用了FindObjectOfType?您不能只假设问题出在“呜”声上。您可以通过将播放“ShatterSmall”的调用替换为“Woosh”来验证“Woosh”声音是否有效。如果声音播放,那么您就知道它有效并且您的问题出在其他地方。
标签: c# unity3d audio transparency