正在加载下一级Unity c#

时间:2016-01-29 22:50:42

标签: c# unity3d

这是我第一次尝试在达到"目标"

时加载下一关
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();
}

我不知道为什么,但有时它不会加载到下一个级别,它工作了一段时间然后停止了,在我重置统一之后它再次起作用,所以我不确定是否这是我的代码或团结......我收到一条警告信息,上面写着&#34;警告CS0618&#39; Application.loadedLevel&#39;已过时:&#39;使用SceneManager确定已加载的场景&#39;&#34;和&#34;警告CS0618&#39; Application.LoadLevel(int)&#39;已过时:&#39;使用SceneManager.LoadScene&#39;&#34;我是编码的新手,完全失去了这个。花了4个小时试图解决它。这些警告是什么?他们可以影响装载吗?我也想要能够保存关卡的价值,这样我就可以在游戏中使用它,并为它添加高分。我在第一次尝试时尝试使用它,但它并没有起到我希望的作用。 (CurrentLevel)

3 个答案:

答案 0 :(得分:3)

Application.LoadLevel,其余的在Unity 5中已经过时了。您必须使用SceneManager代替。

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

您还必须加入using UnityEngine.SceneManagement;

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

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

答案 1 :(得分:1)

  1. 您的场景是否已正确添加到构建设置中? 转到文件&gt;构建设置...并签入&#34;场景中的场景&#34;是否按照您需要的方式添加了从场景#0到场景#3的所有场景。

  2. 您提供的第一个示例应该有效,然而您必须确保在加载下一个场景时不会破坏您的第一个脚本(包含CurrentLevel)。通过在GameObject.DontDestroyOnLoad(gameObject)中调用void Start()来执行此操作。或者,您可以使CurrentLevel成为静态成员。 这是必要的,因此加载下一个场景时CurrentLevel的值不会丢失。这可以解释为什么你一遍又一遍地加载相同的水平。

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

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

答案 2 :(得分:0)

使用UnityEngine.SceneManagement;

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

我建议你阅读Unity关于Scene和SceneManager类的文档,这样你就可以熟悉unity 5引入的变化。