Player Health使用Unity在多个场景中持续存在

时间:2015-02-16 15:45:57

标签: c# unity3d

我目前有一个2d平台游戏,玩家在开始时获得9点生命,每次遇到障碍时都会失去生命。

GameManager脚本存储并显示健康状况,如果玩家失去生命,实体脚本会更新GameManager中的健康状况。

如果玩家失去生命,他们可以在那个级别重生。

在完成关卡后,玩家会进入新的场景“等级完成”,在那里他们可以选择继续升级或退出游戏。

但是,当玩家继续下一个级别时,currentHealth变量不会持续存在并重置为0.

我知道为什么会出现这个问题,但我不知道如何解决它。 LevelComplete中没有调用currentHealth,因此在GameManager中的Start中,它已经失去了currentHealth的值。

我无法在LevelComplete上调用GameManager,因为它会产生播放器。所以我不确定如何传递变量。 这是我的脚本。

游戏经理

using UnityEngine.UI;
using System.Collections;

public class GameManager : MonoBehaviour {


public GameObject player;
    private GameCamera cam;
    private GameObject currentPlayer;
    private Vector3 checkpoint;

    public Text livesText;
    private Entity livesCount;
    public static int startHealth = 9;
    public int currentHealth;
    public bool playerDeath = false;

    public static int levelCount = 2;
    public static int currentLevel = 1;

    void Start () {
        cam = GetComponent<GameCamera> ();
        livesText.text = currentHealth.ToString ();

        if(GameObject.FindGameObjectWithTag("Spawn")){
            checkpoint = GameObject.FindGameObjectWithTag("Spawn").transform.position;
        }

        SpawnPlayer (checkpoint);
    }

    private void SpawnPlayer(Vector3 spawnPos) {
        currentPlayer = Instantiate (player, spawnPos, Quaternion.identity) as GameObject;
        cam.setTarget(currentPlayer.transform);
    }

    public void Update(){
        if(!currentPlayer){
            if (Input.GetButtonDown ("Respawn")) {
                playerDeath = false;
                SpawnPlayer (checkpoint);
            }
        }
        if (playerDeath) {
            Destroy (currentPlayer);
        }
        if (currentPlayer) {
            currentHealth = currentPlayer.GetComponent<Entity> ().GetHealth ();
        }
        livesText.text = currentHealth.ToString ();
    }

    public void SetCheckPoint(Vector3 cp){
        checkpoint = cp;
    }

    public void EndLevel(){
        if(currentLevel < levelCount){
            currentLevel++;
            Application.LoadLevel("Level Complete");
        }
        else{
            Application.LoadLevel("Game Complete");
        }
    }
}

实体

using UnityEngine;
using System.Collections;

public class Entity : MonoBehaviour {
    public static int currHealth;
    private int checkHealth; //Make sure 0 < health < 9

    public void ModifyHealth(int amount){
        checkHealth = currHealth + amount;

        if (checkHealth >= 9) {
            currHealth = 9; //Health can't be greater than 9
        }
        else if(checkHealth <= 0){
            Die (); //End game if health is less than or equal to 0
        }
        else{
            currHealth = checkHealth; //Otherwise, update Health
        }
    }

    public int GetHealth(){
        return currHealth;
    }

    public void SetHealth(int currentHealth){
        currHealth = currentHealth;
    }

    public void Die(){
        Application.LoadLevel ("Game Over");
    }
}

等级完成

using UnityEngine;
using System.Collections;

public class LevelComplete : MonoBehaviour {
    public GUISkin gSkin;

    void OnGUI(){
        GUI.skin = gSkin;

        if(GUI.Button(new Rect((Screen.width/2) - Screen.width *0.15f,Screen.height/2 - Screen.height *0.05f,Screen.width*0.3f,Screen.height*0.1f),"Next Level")){
            Application.LoadLevel ("Level 2");
        }
        if(GUI.Button(new Rect((Screen.width/2) - Screen.width *0.15f,Screen.height/2 + 20.0f,Screen.width*0.3f,Screen.height*0.1f),"Quit")){
            Application.Quit ();
        }
    }
}

0 个答案:

没有答案