我一直试图在我的SoundManager中设置一个muteSound布尔值,然后切换到一个新场景并保留以前存储在muteSound中的值,但是我没有成功。
我尝试过DontDestroyOnLoad(这个);希望它能把它带到新的场景,但由于某种原因它不是。
你们中的任何人都知道我的问题是什么吗?我使用的是正确的功能吗?
谢谢,
答案 0 :(得分:2)
有人会说使用static
。这样可行,但避免这样做,因为你会遇到其他问题。你需要的是PlayerPrefs
。退出时保存该值。游戏开始时读取值。您可以在SoundManager
脚本中执行此操作。
bool muteSound = false;
//Load the value when game starts (default is false)
void Start()
{
muteSound = intToBool(PlayerPrefs.GetInt("muteSound", 0));
}
int boolToInt(bool val)
{
if (val)
return 1;
else
return 0;
}
bool intToBool(int val)
{
if (val != 0)
return true;
else
return false;
}
//Save on Exit
void OnDisable()
{
PlayerPrefs.SetInt("muteSound", boolToInt(muteSound));
}
答案 1 :(得分:0)
您实际上可以将游戏对象从一个场景传递到另一个场景,并且在场景之间维护分配给该游戏对象的类的所有值。
您基本上只需创建一个存储经理脚本的空游戏对象,然后在加载时将游戏对象从一个场景传递到另一个场景。这应该保留附加到空游戏对象的脚本的值。
编辑:修正了一些拼写/语法错误。
答案 2 :(得分:-1)
这是我的解决方案:
public class SoundManager : MonoBehaviour {
public static SoundManager instance = null;
protected virtual void Awake()
{
if (instance == null)
instance = this;
else if (instance != this)
Destroy(gameObject);
DontDestroyOnLoad(gameObject);
}
}
虽然我认为我的问题是因为我将课程改为单身,但实际问题是还有另一个课需要成为单身人士。
由于剩下的代码不是我的共享,here is a tutorial帮助我理解了如果其他人遇到这类问题我做得更好。
答案 3 :(得分:-1)
而不是打字
DontDestroyOnLoad(this);
类型
void Awake() {
DontDestroyOnLoad(gameObject);
}
如果这不起作用,我建议您查看PlayerPrefs。
当关卡完成后,请使用PlayerPrefs.SetFloat("pref name", variable);
或.SetInt();
或.SetBool();
当下一级加载时使用
value = PlayerPrefs.GetFloat("pref name");
或.GetInt();
或.GetBool();
此播放器prefs也可用作保存,因为它们存储在计算机注册表中。
如果您使用它来加载诸如金钱之类的东西并且您是第一次加载它,请执行以下操作:
if(PlayerPrefs.HasKey("money")) {
money = PlayerPrefs.GetFloat("money");
} else {
PlayerPrefs.SetFloat("money", 0);
money = 0;
}
如果你不这样做,价值可能会变得很混乱。当我没有使用PlayerPrefs.HasKey();