我正在开发游戏,我想创建一个静音按钮。因此,我为此编写了一个脚本,并将此脚本附加到不会在加载时销毁的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/