实例化对象仅在游戏启动一次Unity 3D

时间:2019-01-01 16:20:04

标签: c# unity3d

我有一个具有多个级别的游戏,每个级别都有6个场景,游戏直接开始而没有任何菜单场景,并且当玩家打开游戏时,他可以从他已经达到的最后一个场景继续。

我只想在游戏开始时实例化某些元素(例如最佳比分轻按等),我的意思是应该实例化在游戏开始时只有一次(以他到达的级别为准)。

我在GameManager中尝试了这段代码,但是它实例化了每个场景中的元素:

public GameObject PlayButton;

bool GameHasEnded = false;
public float RestartDelay = 2f;
public float NextLevelDelay = 5f;

public int level_index;
private static bool loaded = false;


private void Start()
{
    if (!loaded)
    {
        loaded = true;
        level_index = PlayerPrefs.GetInt("Last_Level");
        SceneManager.LoadScene(level_index);
    }

    GameObject canvas = GameObject.Find("Canvas");
    GameObject play = Instantiate(PlayButton, canvas.transform.position, Quaternion.identity);
    play.transform.SetParent(canvas.transform, false);
}

public void CompleteLevel()
{
    Invoke("NextLevel", NextLevelDelay);
}

public void EndGame()
{
    if (GameHasEnded == false)
    {
        GameHasEnded = true;
        Invoke("Restart", RestartDelay);
    }
}

void NextLevel()
{
    SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex +1);
    level_index = SceneManager.GetActiveScene().buildIndex + 1;
    PlayerPrefs.SetInt("Last_Level", level_index);
    PlayerPrefs.Save();
}

void Restart()
{
    SceneManager.LoadScene(SceneManager.GetActiveScene().path);
}

1 个答案:

答案 0 :(得分:0)

您已经有一个带有if标志static的{​​{1}}块

因为在那里加载了另一个场景,所以您需要类似的第二个标记,例如

loaded