Unity:场景更改后保存更改滑块值

时间:2018-12-17 14:58:49

标签: c# user-interface unity3d

我为我的应用创建了一个设置页面,您可以在其中打开或关闭滑块。 如果打开第一个开关,则布尔isMale设置为true。如果将其关闭,则bool isMale设置为false。 我正在另一页上使用此布尔值,而该页是从该页面获得布尔值的。如果isMale为真,则我将显示一个男模特,而isMale的反义为假。 那部分正在工作。问题是当我回到现场时,所有的布尔值都将重置。有什么想法吗?

代码:

using UnityEngine;
using UnityEngine.UI;

public class SettingsScript : MonoBehaviour {

    // Mikael Paaske
    public static bool isMale;
    public static bool showTutorial;
    public static bool openInApp;

    public GameObject canvas;
    public GameObject showSexText;
    public GameObject ønskeskyenText;
    public GameObject tutorialText;

    public Slider changeSexSlider;
    public Image backgroundchangeSexSlider;

    public Slider changeWebSiteSlider;
    public Image backggroundchangeWebSiteSlider;

    public Slider changeTutorial;
    public Image backgroundchangeTutorial;

    public void Start()
    {
        // Finder alle de nødvendige gameobjekter i scenen 
        canvas = GameObject.Find("SettingsCanvas");

        showSexText = canvas.transform.Find("ShowSexText").gameObject;
        ønskeskyenText = canvas.transform.Find("ShowØnskeskyenText").gameObject;
        tutorialText = canvas.transform.Find("ShowToturialText").gameObject;

        changeSexSlider = GameObject.Find("ChangeSexSlider").GetComponent<Slider>();
        backgroundchangeSexSlider = GameObject.FindGameObjectWithTag("background").GetComponent<Image>();

        changeWebSiteSlider = GameObject.Find("ØnskeskyenSlider").GetComponent<Slider>();
        backggroundchangeWebSiteSlider = GameObject.FindGameObjectWithTag("backgground2").GetComponent<Image>();

        changeTutorial = GameObject.Find("TutorialSlider").GetComponent<Slider>();
        backgroundchangeTutorial = GameObject.FindGameObjectWithTag("backgground3").GetComponent<Image>();

    }

    public void Update()
    {
        // Ændrer farve på gameobjektet alt efter hvilken tekst der står ovenover
        if (showSexText.GetComponent<Text>().text == "Kvinde")
        {
            backgroundchangeSexSlider.color = Color.red;
        }


        if (tutorialText.GetComponent<Text>().text == "Vis ikke")
        {
            backgroundchangeTutorial.color = Color.red;
        }


        if (ønskeskyenText.GetComponent<Text>().text == "Hjemmeside")
        {
            backggroundchangeWebSiteSlider.color = Color.red;
        }
    }
    public void ChangeSex()
    {
        // Hvis slider bliver rykket til den ene ende, bliver boolen sat til det modsatte af før
        isMale = !isMale;
        Debug.Log(isMale);
        // Ændrer gameobjektets tekst til det modsatte efter slideren er rykket
        if (isMale == true)
        {
            showSexText.GetComponent<Text>().text = "Mand";
        }
        else if (isMale == false)
        {
            showSexText.GetComponent<Text>().text = "Kvinde";      
        }
    }

    public void ShowToturial()
    {
        // Hvis slider bliver rykket til den ene ende, bliver boolen sat til det modsatte af før
        showTutorial = !showTutorial;

        // Ændrer gameobjektets tekst ud fra boolen er sand eller falsk
        if (showTutorial == true)
        {
            tutorialText.GetComponent<Text>().text = "Vis";
        }
        else if (showTutorial == false)
        {
            tutorialText.GetComponent<Text>().text = "Vis ikke";
        }  
    }
    public void WishList()
    {
        // Hvis slider bliver rykket til den ene ende, bliver boolen sat til det modsatte af før
        openInApp = !openInApp;

        // Ændrer gameobjektets tekst ud fra boolen er sand eller falsk
        if (openInApp == true)
        {
            ønskeskyenText.GetComponent<Text>().text = "App";
        }
        else if (openInApp == false)
        {
            ønskeskyenText.GetComponent<Text>().text = "Hjemmeside";
        }
    }
}

1 个答案:

答案 0 :(得分:0)

您将要使用Object.DontDestroyOnLoad。这将使您的对象和脚本在场景之间保持活动状态。您还必须注意,通过使用Singleton Pattern,在每个场景加载中最多只能有一个这种类型的对象。

另一种访问信息的方法是通过PlayerPrefs将它们保存到驱动器中。您可以在离开场景时保存它们,也可以在使用C#属性更改值时保存它们。