Application.LoadLevel

时间:2015-11-15 21:40:49

标签: c# unity3d

我试图通过与标记为Complete的对象的碰撞来使我的游戏切换级别。

这是我的代码:

using UnityEngine;
using System.Collections;

public class GameManager : MonoBehaviour {

    public int currentLevel = 0;

    void OncollisionEnter(Collision other)
    {
        if (other.transform.tag == "Complete") {
            Application.LoadLevel (currentLevel + 1);
            currentLevel + 1;
        }
    }
}

没有错误,但它根本不起作用。谁能帮我解决我的问题?事实上我确实在构建设置中有级别。

4 个答案:

答案 0 :(得分:0)

试试这个。如果它不起作用则显示更多代码(在另一个对象上);

using UnityEngine;
using System.Collections;

public class GameManager : MonoBehaviour {

    public int currentLevel = 0;

    void OnCollisionEnter(Collision other)
    {
        if (other.transform.tag == "Complete") {
            currentLevel++; //first change level number
            Application.LoadLevel (currentLevel); //then load
        }
    }
}

答案 1 :(得分:0)

尝试使用它,因为变换并不完全具有标记,但它是具有标记的gameObject本身。使用.CompareTag()也比使用equals运算符更有效。

if(other.CompareTag("Complete")){
your code here
}

答案 2 :(得分:0)

当您加载另一个级别时,您将使用另一个脚本和场景中的gameObjects加载另一个场景。因此,您处于场景0并尝试加载场景1,加载场景1后,您处于新场景中。我假设您在级别1中也有此脚本,但currentLevel变量将为零,因为它是一个新脚本。

所以你有一些选择,首先尝试在场景加载之间保持此脚本(我不推荐)或保存currentLevel <的值 strong>并在其他场景中读取该值。您可以从此处了解有关这两方面的更多信息:PERSISTENCE - SAVING AND LOADING DATA

答案 3 :(得分:0)

因此,让我们列出一些可能的错误:

1:OncollisionEnter应为OnCollisionEnter;

2:此行为需要附加在您的游戏对象上,该游戏对象将与标记的对象发生碰撞&#34;完成&#34; (我的意思是,如果这是附加到场景中的某个对象GameManager,并且当你的Player是同一场景中的另一个GameObject并且不是GameManager的父级时你想要它,那么这将不起作用。你需要OnCollisionEnter来因为GameObject的行为涉及与标记为&#34;完成&#34;)的碰撞。

3:即使它第一次进入第1级也会在第1级时连续重置为1级,因为场景之间的变化会破坏并重建每个GameObject,如果你不隐含的话告诉Unity不要在GameManager的Awake()或Start()方法中调用DontDestoyOnLoad()。

4:即使你把它放在两个场景中,如果你在改变场景时不为每个场景调整检查器中的currentLevel,它将始终为0并将尝试加载场景1;

5:您的Application.LoadLevel()应该处于LateUpdate或某些状态,以确保在您尝试加载新场景之前完成帧中的每个并发处理。 Unity可以处理这几乎完美,但你可以明智地避免使用它的一些问题。因此,设置一个布尔值或某些东西,表明你碰撞并想要加载另一个场景,并在你的主要战利品过程的最后调用真正的LoadLevel ......