Аудио Менеджер Godot

Проблема

Вы попробуете добавить AudioStreamPlayer в Godot на вашего моба/монету и т. д., чтобы воспроизводить звук при смерти объекта или его сборе. Но проблема заключается в том, что при удалении объекта с ним также исчезает аудио-плеер, обрывая звук. Вам нужен более простой способ управления воспроизведением звука.

Решение

Мы решим эту проблему с помощью узла, доступного из любого места в SceneTree. Этот узел управляет набором узлов AudioStreamPlayer и очередью звуковых потоков для воспроизведения.

Создайте новый скрипт в редакторе скриптов.

extends Node

var num_players = 8
var bus = "master"

var available = []  # The available players.
var queue = []  # The queue of sounds to play.


func _ready():
    # Create the pool of AudioStreamPlayer nodes.
    for i in num_players:
        var p = AudioStreamPlayer.new()
        add_child(p)
        available.append(p)
        p.finished.connect(_on_stream_finished.bind(p))
        p.bus = bus


func _on_stream_finished(stream):
    # When finished playing a stream, make the player available again.
    available.append(stream)


func play(sound_path):
    queue.append(sound_path)


func _process(delta):
	# Play a queued sound if any players are available.
    if not queue.empty() and not available.empty():
        available[0].stream = load(queue.pop_front())
        available[0].play()
        available.pop_front()

Установите этот скрипт как автозагрузку в настройках проекта. Дайте ему легко узнаваемое имя, например, «AudioStreamManager».

В любом месте вашего проекта, где вы хотите воспроизвести звук, используйте:

AudioStreamManager.play("res://path/to/sound")

Пример проекта

Ниже вы можете скачать пример проекта, демонстрирующего использование узла аудио-менеджера. Этот проект считывает папку с аудиофайлами и создает сетку кнопок. Нажмите на кнопку, чтобы воспроизвести звук.

Вверху вы можете видеть живую статистику аудио-менеджера.

Скачайте этот проект

Скачайте код проекта здесь: https://github.com/godotrecipes/audio_manager

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

3 × пять =

Прокрутить вверх