Как управлять звуком в другой сцене вкл / выкл в единстве - PullRequest
0 голосов
/ 20 марта 2019

Я делаю игру сейчас, она почти готова.сейчас я пытаюсь управлять звуком включения и выключения с помощью кнопки или переключателя.

Проблема в том, что я поместил игровой объект моего аудиоисточника в заставку, которая находится в 1-й сцене.и я вставил кнопку аудио или музыки в сцену настройки, которая находится внутри 3-й сцены.Я уже создал сценарий c # для управления аудио, но когда я попытался вставить AudioSource, но не смог, так как он из другой сцены.Я попытался поместить AudioSource в ту же сцену, но звук не запустился, за исключением того, что я сначала захожу в сцену настроек.

Вот сценарий:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;


public class Music : MonoBehaviour
{
    static Music instance = null;
    public AudioSource Backsound;

    private void Awake()
    {
        if (instance != null)
        {
            Destroy(gameObject);
        }
        else
        {
            instance = this;
            GameObject.DontDestroyOnLoad(gameObject);
        }
    }

    public void backsoundOnOff()
    {
        AudioSource bgsound = Backsound.GetComponent<AudioSource>();

        if (bgsound.mute = true){
            bgsound.mute = false;
        }
        else {
            bgsound.mute = true;
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 23 марта 2019

Я бы настоятельно рекомендовал ссылаться на имеющийся у вас звуковой скрипт в какой-то игровой менеджер. Обычно, как я работаю, у меня есть один общий скрипт, который управляет множеством опций, которые я обычно называю GameManager. Это устанавливает управление плеером, визуальные параметры и звук. Отсюда вы можете просто установить bool, хочет ли плеер включать и выключать музыку. Если вы хотите изменить эту опцию, вы можете ссылаться на GameManager в любой точке любого скрипта.

//Game Manager code
public void SoundControl(bool soundOff)
{
    If(soundOff == true)
    {
        //Sound Off Control

    }else
    {
        //Sound on Control
    }

}



//Reference to game Manager

GameManager manager;

public void TurnOffSound()
{
   //Turn sound off through manager
   manager = 
   GameObject.FindGameObjectWithTag("Manager").GetComponent<GameManager>
   ().SoundControl(true);
}

Я считаю, что это самый простой способ управления любыми опциями с помощью одного скрипта, на который вы можете ссылаться где угодно.

0 голосов
/ 20 марта 2019

Вы уже решили половину проблемы, используя GameObject.DontDestroyOnLoad

Объект действительно существует в обеих сценах.Теперь вам просто нужно извлечь его.

В первой сцене, где создан объект, измените тег объекта.Вместо использования одного из существующих тегов создайте для него новый тег, который называется что-то вроде «MenuMusic».Убедитесь, что вы присвоили его после его создания, unity не назначает его автоматически

Теперь, в 3-й сцене, в игровом объекте, который должен получить к нему доступ, создайте приватное поле "_music"

в вашей функции «Пуск» добавьте

void Start() {
  _music = GameObject.FindGameObjectsWithTag("MenuMusic");
}

Теперь у вас будет тот же экземпляр музыки из сцены 1

...