在 object.instantiate (Unity) 之后音频不会立即播放
Posted
技术标签:
【中文标题】在 object.instantiate (Unity) 之后音频不会立即播放【英文标题】:Audio doesn't play right after object.instantiate (Unity) 【发布时间】:2020-02-28 17:54:12 【问题描述】:所以我有一个小游戏,游戏对象叫做“炸弹”。我编写了一个脚本,因此每当您点击或单击屏幕时,炸弹游戏对象都会被克隆(使用实例化)。好吧,在我的炸弹游戏对象上,我附加了一个带有
的新脚本组件FindObjectOfType().Play("name");
里面。我的炸弹应该在与某物碰撞时发出轰鸣声,所以触发器和上面的那行代码就是这样做的。
问题来了:当我投掷多颗炸弹(因为我的游戏也包括投掷)时,轰鸣声播放完美,直到另一个炸弹爆炸,轰鸣声一直播放到开始并再次播放。
p>问题是我不希望相同的声音停止,回到开始,然后再次播放,我想要多个彼此独立播放的声音,所以当另一个炸弹爆炸时,当前爆炸的炸弹的声音不会' t 再次播放,它应该继续播放并为另一个炸弹爆炸创建另一个声音。
我今天失去了很多神经元,试图弄清楚如何做到这一点,但我找不到任何线索,所以我现在请求你的帮助! ????
这里有一个视频链接,您可以在其中听到爆炸声有多糟糕https://youtu.be/JdIrcgfkVHI
提前致谢!!
【问题讨论】:
【参考方案1】:据我所知,当不需要时,它过于复杂,只需将带有炸弹剪辑的 Audiosource 附加到炸弹预制件,并将其设置为 PlayOnWake。
至于你为什么会遇到这个问题,我认为这可能是因为 AudioSource 一次只能发出一种声音,所以不能同时发出 2 颗炸弹的爆炸声音。
编辑评论后更新
你可以改变如果从 PlayOnWake 被玩家击中时触发,就像在这个例子中一样。
public class BombDemo : MonoBehaviour
private AudioSource _soundEffect;
private void Awake()
_soundEffect = GetComponent<AudioSource>();
private void OnTriggerEnter(Collider other)
if (other.CompareTag("Player"))
_soundEffect.Play();
当这个脚本附加到一个带有 Audiosource 的 GameObject 时,它会在被与之碰撞的 Player Object 触发时播放它。
将这个逻辑保留在炸弹本身上也更容易维护,而不是试图从播放器端完成所有操作,如果您确实需要访问 PlayerController
(或您所称的任何名称),您也可以然后在播放音效的同时使用..
PlayerController playerController = other.gameObject.GetComponent<PlayerController>()
..例如
【讨论】:
其实没有。如果我将音频源附加到在唤醒时播放的炸弹,这意味着每当产生新炸弹时它都会播放声音,我不希望它这样做。我希望炸弹仅在与某物碰撞时播放该声音。而且我认为我的代码也没有在炸弹副本上附加新的音频源,我认为它只在原件上这样做,这可以解释为什么它一次不能播放 2 个声音。如果您还没有,我建议您观看链接中的视频。以上是关于在 object.instantiate (Unity) 之后音频不会立即播放的主要内容,如果未能解决你的问题,请参考以下文章
在uniapp中获取可视区域的高度(uni.getSystemInfo)