加载下一级 Unity c#

本文关键字:一级 Unity 加载 | 更新日期: 2023-09-27 18:32:27

这是我第一次尝试在达到"目标"时加载下一个级别

public int CurrentLevel = 0;
public static int maxlevel = 3;
public void CompleteLevel()
{
    if (CurrentLevel < maxlevel)
    {
        CurrentLevel += 1;
        SceneManager.LoadScene(CurrentLevel);
    }
    else
        print("you win");
}

这是在另一堂课上...

void OnTriggerEnter(Collider other)
{
    if (other.transform.tag == "DeathObject")
        Die();
    if (other.transform.tag == "Goal")
    Manager.CompleteLevel();
}

它最终加载了第一关,进入了第二关,然后在我到达目标时它会重复第二张地图。它要做的另一件事是从第一级或第二级跳到最后一关。不知道那里发生了什么。这是我尝试的第二件事:

public void LevelPassTest()
{
    if (Application.loadedLevel > 4)
        Application.LoadLevel(Application.loadedLevel + 1);
        else
    print("win");
}

这是在另一堂课上。

void OnTriggerEnter(Collider other)
{
    if (other.transform.tag == "DeathObject")
        Die();
    if (other.transform.tag == "Goal")
    Manager.LevelPassTest();
}

我不知道为什么,但有时它不会加载下一个级别,它工作了一段时间然后停止了,在我重置 unity 后它再次工作,所以我不确定这是我的代码还是 unity...我收到一条警告消息,指出"警告 CS0618 'Application.loadedLevel' 已过时: '使用 SceneManager 确定已加载的场景'"和"警告 CS0618 'Application.LoadLevel(int)' 已过时: '使用 SceneManager.LoadScene'" 我是编码新手,完全迷失了这一点。花了 4 个小时试图修复它。这些警告是什么?他们能影响负载吗?我还希望能够保存关卡的值,以便我可以在游戏存档中使用它,并为其附加高分。我在第一次尝试中尝试使用它,但它并没有按照我希望的方式工作。(当前水平)

加载下一级 Unity c#

Application.LoadLevel 和其余的在 Unity 5 中已经过时。您必须改用SceneManager

所以Application.LoadLevel()现在SceneManager.LoadScene().

您还必须包括using UnityEngine.SceneManagement;

看这里: http://docs.unity3d.com/ScriptReference/SceneManagement.SceneManager.LoadScene.html

所需要的只是一个快速的谷歌。

  1. 您的场景是否已正确添加到构建设置中?转到文件>生成设置...并在"构建中的场景"中检查是否从场景 #0 到场景 #3 的所有场景都按照您需要的方式添加。

  2. 您给出的第一个示例应该可以工作,但是您必须确保您的第一个脚本(包含CurrentLevel)不会在加载下一个场景时被破坏。通过在void Start()中调用GameObject.DontDestroyOnLoad(gameObject)来执行此操作。或者,也可以CurrentLevel设置为静态成员。这是必要的,以便在加载下一个场景时不会丢失CurrentLevel的值。这可以解释为什么你一遍又一遍地加载相同的关卡。

  3. 在第二个示例中,在 LevelPassTest() 中,您检查是否Application.loadedLevel > 4,这当然必须Application.loadedLevel < 4。如果修复此问题,第二个示例也应该可以正常工作。

是的,您正在部分使用过时的API,但这并不能解释为什么它不起作用。

使用 UnityEngine.SceneManagement;

然后使用 SceneManager.LoadScene() 的方式与我们过去使用 Application.LoadLevel() 的方式相同,在 unity 5.x.x 中 Application.LoadLevel 已经过时 - 这意味着它将在未来被删除并且不应该使用,并且不能保证它会正常工作。

我建议您阅读 Unity 关于 Scene 和 SceneManager 类的文档,以便熟悉 Unity 5 引入的变化。