如何在Unity中播放音效

本文详细介绍了如何在Unity游戏中使用AudioSource组件播放音效,包括背景音乐、爆炸声音和Powerup收集声音的实现方式。重点讲解了PlayOnAwake、Loop功能以及如何在特定事件触发时播放音效。

如何在Unity中播放音效

目标:学习如何在 Unity 中播放音效。

所以我们想确保我们可以在视频游戏中播放我们想要的声音,但是我们如何才能实现这样的壮举呢?
首先,让我们了解它是如何工作的。如果你想让一个游戏对象发出声音,它需要音频源Audio Source组件。每个音频源都有一个音频剪辑Audio Clip,它作为参考保存,并且可以在任何给定时间播放。

在这里插入图片描述

我们的背景游戏对象,当前循环播放我们的背景剪辑。

上面的示例向我们展示了 Play On Awake 和 Loop 的工作原理。第一个,一旦对象出现在我们的游戏中,音频剪辑就会播放。另一个,顾名思义,循环音频剪辑,一遍又一遍地播放。这两种方法在背景音乐的情况下都非常有用,背景音乐从一开始就开始播放并循环播放。

在这里插入图片描述

将背景剪辑clip添加到我们的对象中。

Play On Awake 的另一个例子可以在我们的爆炸中看到。当我们摧毁小行星时,我们会实例化爆炸,爆炸创建时会播放自己的声音。

在这里插入图片描述

我们的爆炸预制件有自己的音频剪辑,并设置了“唤醒播放”,一旦出现在屏幕上即可播放。

与我们的背景音乐不同,这首音乐没有设置为循环播放,因为我们只想听到物体爆炸的声音,而不是在爆炸结束后重新启动爆炸声。我们还有爆炸预制件,可以在动画完成后自行摧毁。
private void Start()
{
    Destroy(gameObject, 2.4f);
}
但是,如果在特定情况下而不是在对象出现时播放剪辑呢?嗯,Unity确实有这样的功能,而且很容易实现。这是为我们的激光器完成的。当玩家发射激光时,我们会为其播放声音,但仅在其发射时播放,以前从未播放过。
我们只需确保将剪辑clip附加到检查器中,并抓住播放器的音频源Audio Source组件的句柄。

在这里插入图片描述

将我们的音频源添加到播放器,并将激光声音剪辑添加到其中。

[SerializeField] private AudioClip _laserSoundClip;
private AudioSource _audioSource;
private void Start()
{
    _audioSource = GetComponent<AudioSource>();
    if (_audioSource == null)
        Debug.LogError("Audio Source is NULL on the Player");
    else
        _audioSource.clip = _laserSoundClip;
}

private void FireLaser()
{
    _canFire = Time.time + _fireDelay;
    if (_isTripleShotOn)
    {
        Instantiate(_tripleShotPrefab, transform.position, Quaternion.identity);
    }
    else
    {
        Vector3 laserOffset = new(transform.position.x, transform.position.y + 1.05f, 0);
        Instantiate(_laserPrefab, laserOffset, Quaternion.identity);
    }

    _audioSource.Play();
}
正如我们所看到的,当我们发射激光时,我们只需确保调用我们的音频源,以播放其附加的剪辑。
这将使玩家在射击激光时发出激光的声音。
但我们的 Powerups 无法做到这一点。当收集我们的能量时,如果我们尝试类似的方法,遗憾的是我们没有得到我们想要的结果。这是为什么 ?
嗯,对于我们的 Powerups,与其他对象不同,我们在收集它们后立即销毁它们,因此它们不能成为自己的音频源,因为它们在开始播放时会立即被删除。
同样,Unity 中的另一个强大功能是能够 PlayClipAtPoint。这允许我们实例化一个音频源,并在剪辑完成播放后处理它。
[SerializeField] private AudioClip _powerUpClip;
private void ActivatePowerUp(Player player)
{
    AudioSource.PlayClipAtPoint(_powerUpClip, transform.position);
    switch (_type)
    {
        case PowerUpType.TripleShot:
            player.ActivateTripleShotPowerUp(_duration);
            break;
        case PowerUpType.Speed:
            player.ActivateSpeedPowerUp(_duration);
            break;
        case PowerUpType.Shield:
            player.ActivateShieldPowerUp();
            break;
        default:
            break;
    }
}
现在,当我们收集 Powerup 时,我们可以简单地使用 PlayClipAtPoint 方法,该方法将播放附加的剪辑、我们的 Powerup 收集声音,并在我们作为该方法的参数提供的位置使用音频源。在这种情况下,它将在加电位置为我们播放声音。
使用 Unity 播放声音是多么容易!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小云同志你好

谁能书阁下,白首太玄经

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值