【问题标题】:Audio doesn't play right after object.instantiate (Unity)在 object.instantiate (Unity) 之后音频不会立即播放
【发布时间】:2020-02-28 17:54:12
【问题描述】:

所以我有一个小游戏,游戏对象叫做“炸弹”。我编写了一个脚本,因此每当您点击或单击屏幕时,炸弹游戏对象都会被克隆(使用实例化)。好吧,在我的炸弹游戏对象上,我附加了一个带有

的新脚本组件

FindObjectOfType().Play("name");

里面。我的炸弹应该在与某物碰撞时发出轰鸣声,所以触发器和上面的那行代码就是这样做的。

问题来了:当我投掷多颗炸弹(因为我的游戏也包括投掷)时,轰鸣声播放完美,直到另一个炸弹爆炸,轰鸣声一直播放到开始并再次播放。

p>

问题是我不希望相同的声音停止,回到开始,然后再次播放,我想要多个彼此独立播放的声音,所以当另一个炸弹爆炸时,当前爆炸的炸弹的声音不会' t 再次播放,它应该继续播放并为另一个炸弹爆炸创建另一个声音。

我今天失去了很多神经元,试图弄清楚如何做到这一点,但我找不到任何线索,所以我现在请求你的帮助! ????

这里有一个视频链接,您可以在其中听到爆炸声有多糟糕https://youtu.be/JdIrcgfkVHI

提前致谢!!

【问题讨论】:

    标签: c# unity3d


    【解决方案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 个声音。如果您还没有,我建议您观看链接中的视频。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多