我正在以团结c#建造一个二维小行星射击游戏。我需要的是将玩家的心脏保存到下一个级别。所以我只是将得分保存在我现在需要的是心脏节省。分数保存为下一级别,所以它的工作方式如下,在第一级你有例如在3000点,你进入nesxt级别,然后它将从3000开始,但如果你点击重启或如果oyu退出你从0和从第一级开始。这就是得分与心灵一样的需要。所以如果你用1颗心完成第一级,那么你需要用1颗心去2分。如果你用3颗心完成2个tn 3将启动3颗心,如果你点击重启或者你退出那么它将从默认状态开始。心灵是图像用户界面,我想像玩家首选的scor一样,但我不确定如何。
if (col.gameObject.tag == "AsteroidBig") {
if (heart.enabled == true && heart1.enabled == true && heart2.enabled == true) {
heart.enabled = false;
Instantiate (explosion, col.transform.position, col.transform.rotation);
Vector3 pos = new Vector3 (0f, 0f, 0f);
Instantiate (player, pos, Quaternion.identity);
Destroy (col.gameObject);
Destroy (this.gameObject);
Instantiate (medast[Random.Range(0,medast.Length)],col.transform.position,col.transform.rotation);
Instantiate (medast[Random.Range(0,medast.Length)],col.transform.position,col.transform.rotation);
} else if (heart1.enabled == true && heart2.enabled == true) {
heart1.enabled = false;
Instantiate (explosion, col.transform.position, col.transform.rotation);
Vector3 pos = new Vector3 (0f, 0f, 0f);
Instantiate (player, pos, Quaternion.identity);
Destroy (col.gameObject);
Destroy (this.gameObject);
Instantiate (medast[Random.Range(0,medast.Length)],col.transform.position,col.transform.rotation);
Instantiate (medast[Random.Range(0,medast.Length)],col.transform.position,col.transform.rotation);
} else if (heart2.enabled == true) {
heart2.enabled = false;
Instantiate (explosion, col.transform.position, col.transform.rotation);
Vector3 pos = new Vector3 (0f, 0f, 0f);
Instantiate (player, pos, Quaternion.identity);
Destroy (col.gameObject);
Destroy (this.gameObject);
Instantiate (medast[Random.Range(0,medast.Length)],col.transform.position,col.transform.rotation);
Instantiate (medast[Random.Range(0,medast.Length)],col.transform.position,col.transform.rotation);
} else if (heart.enabled == false && heart1.enabled == false && heart2.enabled == false) {
Instantiate (explosion, col.transform.position, col.transform.rotation);
Destroy (col.gameObject);
Destroy (this.gameObject);
Instantiate (medast[Random.Range(0,medast.Length)],col.transform.position,col.transform.rotation);
Instantiate (medast[Random.Range(0,medast.Length)],col.transform.position,col.transform.rotation);
GameOverPanel.SetActive (true);
}
}
一个带有心的if语句看起来像是有点乱,但它就像这样。如果你触摸小行星,它会检查3颗心是否开启,其中一颗是假装,然后如果你有2颗心,那么另外一颗是假的,依此类推,直到你没有心而你松了。这是碰撞的逻辑。请帮助保存这个心,问任何问题,因为我知道它搞砸了。
答案 0 :(得分:1)
这里有两个选项,具体取决于您的选择
1)创建一个静态类 加载新级别时不会重置静态类,因此您可以存储有关播放器的任何信息
public class GameData
{
public static int NumberOfHearts = 3;
}
在您的代码中,您将更新NumberOfHearts
以反映当您被小行星触及时有多少颗心。例如,
GameData.NumberOfHearts--; //We just got touched by an asteroid
2)场景管理器(如果您正在使用Application.LoadLevel(),则不适用)
您可以在场景的根部为玩家创建一个GameObject
然后,当你加载你的关卡时,你会打电话
SceneManager.MoveGameObjectToScene(playerObject, "sceneName")
有关MoveGameObjectToScene的详细信息,请参阅here。
在这种情况下,对象将被任何脚本和子对象继承,因此您已经拥有了下一级别的所有心脏。