c# - 场景统一变化时,两个游戏对象之间保持链接

标签 c# button audio unity3d gameobject

我正在开发游戏,我想创建一个静音按钮。因此,我为此编写了一个脚本,并将此脚本附加到不会在加载时销毁的gameObject中。

我将脚本与主菜单中的UI按钮链接。当我更改场景时,此UI按钮被破坏。

当我开始游戏并单击按钮时,音频将关闭,而当我单击返回时,它将打开。

但是当我切换到另一个场景并返回主菜单时,我的脚本没有附加UI按钮。所以当我触摸按钮时,音频不会改变是一种行为

我想知道即使UI Button被破坏了,也可以维护UI Button和脚本之间的链接(附加到普通的GameObject)吗?

我尝试了这个:

ButtonGameObject = GameObject.Find("UI Button");

但这不起作用。

我该如何解决?

非常感谢。

最佳答案

因此,比使用脚本搜索并获取组件更好的方法是使用Unity中的PlayerPrefs类。本质上,它将保留游戏的所有重要方面以及自动填充信息。

对于游戏的许多用户自定义方面来说,这是一个很棒的工具。使用此脚本时,有一个脚本(sceneController是个好名字)将在场景开始时运行(在0,0,0创建一个空白对象),然后在void Start()下让脚本捕获静音/取消静音按钮:GameObject.Find("MuteButton")或(我最喜欢的)给它一个名为MuteButton的标签,然后运行:GameOject.FindWithTag("MuteButton")。同样,一旦您获得了该按钮的链接,就可以在按下按钮时为其添加一个侦听器。

还将声音管理器存储在gameController中,该代码将在整个游戏中传递。这将控制soundManager并可以访问它。因此,sceneManager也需要引用gameManager

使用仅用于玩家首选项(如果需要的话,一个 Controller )的脚本是更好的组织和包含用户首选项的方法。更好的清晰度和分离度。



SceneController对象脚本

class SceneController {
    GameObject muteButton;

    void Start() {
        muteButton = GameObject.FindWithTag("muteButton");
        muteButton.AddListener(muteButtonCheck);
    }

    void muteButtonClick() {
        if (PlayerPrefs.GetInt("playerMute")) {
            // If 1 (on)
            // Set sound off
            PlayerPref.SetInt("playerMute", 0);
        } else {
            // It's 0 (off)
            // Set sound on
            PlayerPrefs.SetInt("playerMute", 1);
        }
    }
}

关于c# - 场景统一变化时,两个游戏对象之间保持链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44164435/

相关文章:

c# - 在 Blazor 中找不到类型或命名空间名称 'UIFocusEventArgs' & 'LocalDate'

button - 如何使用 python 在 dash 的 app.layout 中使用循环创建多个按钮?

css - Twitter Bootstrap 和大于按钮中的标准图标

c# - 切开声音效果/静音的开始

c# - 有没有更好的方法来做一个对象列表?

c# - 在 Entity Framework 4.1 (POCO) 中添加具有预定义 PK 值的记录

c# - 我们使用MemoryStream来做深拷贝,但是效率很低,有什么方法可以改进吗?

python - 如何在 Tkinter 的一个按钮中拥有图像 + 文本

ios - 音频播放器在后台播放,应该基于硬件静音开关工作

java - 如何在Java中读取压缩的.wav音频文件?