Как правильно воспроизвести музыку в Unity?

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Как правильно воспроизвести музыку в Unity?

Сообщение Meerex 12 янв 2021, 20:05

Здравствуйте. Пришло время поработать над музыкой. Я написал прикольную электронщину для игры, однако её ещё нужно интегрировать в unity. Дело в том, что в меню у меня играет медленный лид, а когда начинается игра, воспроизводится небольшая сбивка и сама музыка. Нужно, чтобы все звучало красиво, будто это целостная композиция.
Итак: у меня есть: лид, файл сбивки, сама музыка.

Я придумал такую схему: на лид и тему я устанавливаю по два AudioSource и воспроизвожу их поочереди, чтобы не было стыков. Как я понял, адекватного отслеживания окончания клипа в unity нет, поэтому пользуюсь WaitForSeconds.

Проблема в том, что музыка может играть нормально, а может накладываться. Моим ушам больно.
Есть у кого предположения, почему так происходит?

Сам код:(Метод GameStart() вызывается из другого скрипта, когда игра начинается)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Audio;

public class MusicManager : MonoBehaviour
{
public AudioSource Pad;
public AudioSource PadSec;
public AudioSource FirstLead;
public AudioSource MainLead;
public AudioSource SecMainLead;

public int PadConst;
public int MainConst;
bool isPad;
bool isMainLead;
public bool wasStarted;

void Start()
{
isPad = true;
}
void Update()
{
if (isPad)
{
StartCoroutine(PadDelay());
isPad = false;
}

if (isMainLead)
{
StartCoroutine(MainLeadDelay());
isMainLead = false;
}
}
IEnumerator PadDelay()
{
if (!wasStarted)
{
if (PadConst == 1)
{
PadSec.Play();
PadConst--;
}
else if (PadConst == 0)
{
Pad.Play();
PadConst++;
}
yield return new WaitForSeconds(24f);

isPad = true;
}
}
public void GameStart()
{
Pad.Stop();
PadSec.Stop();
FirstLead.Play();
StartCoroutine(FirstLeadDelay());
wasStarted = true;
}
IEnumerator FirstLeadDelay()
{
yield return new WaitForSeconds(12.34f);
isMainLead = true;
}
IEnumerator MainLeadDelay()
{
if (MainConst == 1)
{
SecMainLead.Play();
MainConst--;
}
else if (MainConst == 0)
{
MainLead.Play();
MainConst++;
}
yield return new WaitForSeconds(83.98f);

isMainLead = true;
}
Meerex
UNец
 
Сообщения: 47
Зарегистрирован: 27 апр 2019, 18:44

Re: Как правильно воспроизвести музыку в Unity?

Сообщение samana 14 янв 2021, 09:14

А что если воспользоваться возможностями Mixer-а, ведь он специально придуман для облегчения манипуляции музыки в проекте.
Посмотрите уроки по нему, найдёте для себя кучу полезностей.
Это из мануала https://docs.unity3d.com/ru/current/Man ... Mixer.html
Это видео-урок на русском https://www.youtube.com/watch?v=560AKXsVuh8
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 19