【问题标题】:How to control audio in another scene on/off in unity如何统一控制另一个场景中的音频开/关
【发布时间】:2019-03-23 22:42:08
【问题描述】:

我现在正在制作游戏,快完成了。现在我正在尝试通过按钮或切换按钮来控制音频的开启和关闭。

问题是,我将音频源游戏对象放在第一个场景中的启动画面中。我将音频或音乐按钮放在第三场景内的设置场景中。我已经制作了 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;
        }
    }
}

【问题讨论】:

  • 查看混音器。

标签: unity3d button toggle


【解决方案1】:

你已经通过使用 GameObject.DontDestroyOnLoad 解决了一半问题

该物体确实存在于两个场景中。现在你只需要获取它。

在创建对象的第一个场景中,更改对象的标签。与其使用现有标签之一,不如为其创建一个名为“MenuMusic”之类的新标签。确保创建后分配,unity不会自动分配

现在,在第三个场景中,在需要访问它的游戏对象中,创建一个私有字段“_music”

在您的 Start 函数中,添加

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

您现在将拥有来自场景 1 的相同音乐实例

【讨论】:

  • 如果我制作了一个新脚本,然后我想将另一个脚本的功能导入到该脚本中怎么办?例如我有“声音”脚本,我想使用“音乐”脚本中的函数
  • 你想让这个函数与音乐对象相关吗?还是您希望声音脚本和音乐脚本中的功能相同?
【解决方案2】:

我强烈建议您将您拥有的声音脚本引用到某种游戏管理器中。通常我的工作方式是我有一个通用脚本来控制我通常称之为 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);
}

我发现这是通过一个您可以在任何地方引用的脚本来控制任何选项的最简单方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-26
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多