如何在菜单中保存设置

时间:2014-09-24 18:24:14

标签: c# unity3d

我已经制作了一个静音按钮脚本(在我的菜单/暂停屏幕中),这个脚本有问题。静音/取消静音部分按照我的意愿工作,但每当我死的时候,都会改变游戏中的场景'按下菜单',静音按钮会重置为我在清醒功能中所说的内容(显然)。但是我怎样才能节省'静音按钮状态,所以当我死的时候它会停留在我死前的状态。

喜欢这样:玩游戏(取消静音,声音) - >按暂停/骰子进入菜单屏幕 - >更改按钮(切换)以“静音”#39; (声音关闭) - >继续播放/再次播放 - >按暂停/再次死亡 - >按钮仍设置为“静音”。

这是我的脚本(抱歉,它有点乱,我是C#的新手):

public class MuteButton : MonoBehaviour 
{
    public Texture2D Texture1;
    public Texture2D Texture2;
    public Texture2D mainTexture;
    public bool textureBool;

    public int xAs = 290;
    public int yAs = 635;
    public int xSize = 130;
    public int ySize = 130;

    public float native_width = 1080;
    public float native_height = 1920;

    public GUIStyle style = null;

    void Awake() 
    {
        mainTexture = Texture1;
        textureBool = true;
        AudioListener.pause = false;
    }

    void OnGUI() 
    {
        float rx = Screen.width / native_width;
        float ry = Screen.height / native_height;

        GUI.matrix = Matrix4x4.TRS (new Vector3(0, 0, 0), Quaternion.identity, new Vector3(rx, ry, 1)); 

        //if (GUI.Button (new Rect (50,500,50,50),  mainTexture)) 
        if (GUI.Button (new Rect (xAs, yAs, xSize, ySize), mainTexture, style))
        {

            if (textureBool)
            {
                mainTexture = Texture2;   //Swap to Texture2
                textureBool = false;
                AudioListener.pause = true;
            }
            else
            {
                mainTexture = Texture1;
                textureBool = true;
                AudioListener.pause = false;
            }
        } 
    }
}

1 个答案:

答案 0 :(得分:0)

如果你想让gameObject持久化你可以使用

DontDestroyOnLoad(gameObject);

并且没有你应该做的同一个游戏对象的两个克隆

public static exist=false;

Void Awake() {
if (!exist) {
    DontDestroyOnLoad(this.gameObject);
    exist = true;}
 else {
    Destroy(this.gameObject);
} 

}

一种方法是将所有选项放在类中,并将声音作为类变量并以不会破坏的方式放置

public Options option;

      void Start()    
    {
        DontDestroyOnLoad(option);
        option=option.GetComponent<Options>();
        textureBool=option.sound;  
    }

void died()    
    {
         option.sound=textureBool;
    }

一种更慢但更简单的方法是像这样使用的pleyerPrefs

 void Start()    
    {
        textureBool=Convert.ToBoolean(PlayerPrefs.GetInt("sound")) ;
    }


void died()    
    {
         PlayerPrefs.SetInt("sound",Convert.ToInt32(textureBool));
         PlayerPrefs.Save();
    }