如何加载游戏,在Unity中有很多场景

时间:2016-12-16 07:51:36

标签: c# unity3d

在我在Unity3d上的游戏中,我有许多场景,现在我在保存/加载游戏上工作。我可以保存游戏,但如果我想加载它,我需要加载我需要的场景,然后加载所有其他参数。

或者我应该首先加载所有参数,用DontDestroyOnLoad()保存,然后加载我需要的场景?

enter image description here

public void ButtonSave()
{
    PlayerPrefs.SetFloat("transform position x" + currentActiveSlot, playerTransform.position.x);
    PlayerPrefs.SetInt("task 1 completed" + currentActiveSlot, isTask1Completed);
    PlayerPrefs.SetInt("latestSaveSlot", latestSaveSlot);
    PlayerPrefs.SetInt("act number" + currentActiveSlot, 0);
    PlayerPrefs.SetInt("step number" + currentActiveSlot, 0);
    PlayerPrefs.SetString("sceneName" + currentActiveSlot, SceneManager.GetActiveScene().name);        
    PlayerPrefs.Save();        
}

public void ButtonLoad()
{
    playerTransform.position = new Vector3(PlayerPrefs.GetFloat("transform position x" + currentActiveSlot),
                                           PlayerPrefs.GetFloat("transform position y" + currentActiveSlot),
                                           PlayerPrefs.GetFloat("transform position z" + currentActiveSlot));

    isTask1Completed = PlayerPrefs.GetInt("task 1 completed" + currentActiveSlot);

    //gameManager.currentActNumber = PlayerPrefs.GetInt("act number" + currentActiveSlot);
    //act_2.stepNumber = PlayerPrefs.GetInt("step number" + currentActiveSlot);
    //SceneManager.LoadScene(PlayerPrefs.GetString("sceneName" + currentActiveSlot));
}

1 个答案:

答案 0 :(得分:2)

您应该先使用SceneManager.LoadScene加载场景,然后使用PlayerPrefs代码加载播放器设置。

public void ButtonLoad()
{
    SceneManager.LoadScene(PlayerPrefs.GetString("sceneName" + currentActiveSlot));
    playerTransform.position = new Vector3(PlayerPrefs.GetFloat("transform position x" + currentActiveSlot),
                                           PlayerPrefs.GetFloat("transform position y" + currentActiveSlot),
                                           PlayerPrefs.GetFloat("transform position z" + currentActiveSlot));

    isTask1Completed = PlayerPrefs.GetInt("task 1 completed" + currentActiveSlot);
}

不经常保存变量不是一个好主意。您可以看到保存和加载场景here的正确方法。

编辑:

  

但是在我加载场景后的情况下,会是方法的其他部分   执行?

是/否。

调用SceneManager.LoadScene后,该函数中的其余代码将执行,但执行将在新加载的场景中的相同场景中完成。 因此,您将丢失刚刚加载的播放器设置。

所以,我认为这对你没用。将播放器设置代码放在AwakeStart功能中,以在加载场景后自动加载播放器设置。

public void ButtonLoad()
{
    SceneManager.LoadScene(PlayerPrefs.GetString("sceneName" + currentActiveSlot));
}

void Awake()
{
    isTask1Completed = PlayerPrefs.GetInt("task 1 completed" + currentActiveSlot);
    //...other PlayerPrefs.GetInt code
}