我试图通过与标记为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;
}
}
}
没有错误,但它根本不起作用。谁能帮我解决我的问题?事实上我确实在构建设置中有级别。
答案 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 ......