【问题标题】:Loading next level Unity c#加载下一级 Unity c#
【发布时间】:2016-01-29 22:50:41
【问题描述】:

这是我在达到“目标”后第一次尝试加载下一个级别

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();
}

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

【问题讨论】:

  • 你得到的警告正是告诉你该做什么。
  • @ 测量好我不知道如何使用场景管理器而不让它看起来像我的第一次尝试,但没有成功。

标签: c# unity3d


【解决方案1】:

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

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

您还必须包含using UnityEngine.SceneManagement;

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

只需要一个快速的谷歌。

【讨论】:

    【解决方案2】:
    1. 您的场景是否正确添加到构建设置中? 转到文件 > 构建设置...并检查“构建中的场景”是否按照您需要的方式添加了从场景 #0 到场景 #3 的所有场景。

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

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

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

    【讨论】:

      【解决方案3】:

      使用 UnityEngine.SceneManagement;

      然后像以前使用 Application.LoadLevel() 一样使用 SceneManager.LoadScene(),在统一 5.x.x Application.LoadLevel 已过时 - 意味着它将来将被删除并且不应使用,并且不能保证它会正常工作。

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

      【讨论】:

        猜你喜欢
        • 2017-05-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-12
        • 1970-01-01
        • 2016-02-19
        • 2022-01-06
        相关资源
        最近更新 更多