当前位置:   article > 正文

如何在Unity中播放音效_unity 播放音效

unity 播放音效

如何在Unity中播放音效

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

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

在这里插入图片描述

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

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

在这里插入图片描述

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

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

在这里插入图片描述

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

与我们的背景音乐不同,这首音乐没有设置为循环播放,因为我们只想听到物体爆炸的声音,而不是在爆炸结束后重新启动爆炸声。我们还有爆炸预制件,可以在动画完成后自行摧毁。
private void Start()
{
    Destroy(gameObject, 2.4f);
}
  • 1
  • 2
  • 3
  • 4
但是,如果在特定情况下而不是在对象出现时播放剪辑呢?嗯,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();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
正如我们所看到的,当我们发射激光时,我们只需确保调用我们的音频源,以播放其附加的剪辑。
这将使玩家在射击激光时发出激光的声音。
但我们的 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;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
现在,当我们收集 Powerup 时,我们可以简单地使用 PlayClipAtPoint 方法,该方法将播放附加的剪辑、我们的 Powerup 收集声音,并在我们作为该方法的参数提供的位置使用音频源。在这种情况下,它将在加电位置为我们播放声音。
使用 Unity 播放声音是多么容易!
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/459812?site
推荐阅读
相关标签
  

闽ICP备14008679号