【问题标题】:Unity: Change Slider Value save after scene changeUnity:场景更改后更改滑块值保存
【发布时间】:2018-12-17 14:58:48
【问题描述】:

我为我的应用创建了一个设置页面,您可以在其中打开或关闭滑块。 如果打开第一个,则布尔 isMale 设置为 true。如果将其关闭,则布尔 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";
        }
    }
}

【问题讨论】:

  • 数据不会在场景之间持续存在,除非您将其存储在场景之间持续存在的位置:静态类或标有DontDestroyOnLoad的对象

标签: c# user-interface unity3d


【解决方案1】:

您需要使用Object.DontDestroyOnLoad。这将使您的对象和脚本在场景之间保持活力。您还必须注意,通过使用Singleton Pattern,在每个场景加载中此类对象不超过一个。

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

【讨论】:

  • 我会尝试并返回!提前致谢!
猜你喜欢
  • 1970-01-01
  • 2023-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-12
  • 1970-01-01
相关资源
最近更新 更多