在 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&lt;PlayerController&gt;()

..例如

【讨论】:

其实没有。如果我将音频源附加到在唤醒时播放的炸弹,这意味着每当产生新炸弹时它都会播放声音,我不希望它这样做。我希望炸弹仅在与某物碰撞时播放该声音。而且我认为我的代码也没有在炸弹副本上附加新的音频源,我认为它只在原件上这样做,这可以解释为什么它一次不能播放 2 个声音。如果您还没有,我建议您观看链接中的视频。

以上是关于在 object.instantiate (Unity) 之后音频不会立即播放的主要内容,如果未能解决你的问题,请参考以下文章

uni-app——uni-ui的使用

uni-app:uni-ui的使用

在uniapp中获取可视区域的高度(uni.getSystemInfo)

uni-app.04.发布成H5后,uni.chooseImage方法在android WebView上无法使用

uni App 常见问题

uni.createSelectorQuery() 巨坑uni获取元素离顶部距离