一种跟踪场景加载生命的方法

时间:2015-08-04 10:06:06

标签: c# unity3d

有没有办法记录玩家剩下的生命?

我有一个游戏对象,它附有一个脚本,玩家与游戏对象交互。在脚本里面我有一个名为Check()的方法。使用事件触发器(指针点击)我调用该方法来检查玩家是否失去生命或赢得积分。游戏对象是使用附加到其上的脚本上的Start()方法设置的。

如果玩家失去了生命,那么我应该做一些像

这样的事情

lives --;

因此,如果初始值为3,那么现在他将剩下2个生命。然后我需要重新加载相同的场景,这就是我的问题开始的地方......

如果我在Start()方法上设置了生命量,当场景重新加载时,玩家将再次拥有3条生命,当然,这不应该发生,因为玩家在场景重新加载之前就失去了一条生命。

我可以使用一个名为livesLeft的变量创建一个空的游戏对象并附加一个脚本(让它称之为TempScript),以存储剩余的生命量,然后使用Awake()方法和已知的

DontDestroyOnLoad(This);

当场景重新加载变量时,livesLeft不会改变,所以如果玩家在重装时有两条生命,重装后他仍然会有两条命。使用此解决方案的问题是,如何设置初始生命量然后???

第一次加载场景 - > livesLeft = 3 - >加载游戏对象 - >玩家与游戏对象互动 - >调用Check() - >球员失去生命 - > livesLeft = livesLeft - 1 - >重新加载场景 - > livesLeft = 2 - > ...

对不起,也许这是一个非常简单的问题,但我看不到解决方案......

是的,我知道单身人士,但除非别无选择,否则我真的不想使用它们。

4 个答案:

答案 0 :(得分:2)

我倾向于使用单身人士。 这是一些示例代码;

public class DataHolder : MonoBehaviour
{
public int someData;
public static DataHolder holder; 

void Awake()
{
if (holder == null)
        {
            DontDestroyOnLoad(gameObject);
            holder = this;

        }
        else if (holder != this)
        {
            Destroy(gameObject);

        }
    }

}

答案 1 :(得分:1)

您可以使用PlayerPrefs类来存储数据。

它基本上存储了你在会话之间抛出的任何数据。

示例

public class Player : Monobehaviour {

    public int lives = 3;

    void Start () {
        //Get the number of lives stored from previous sessions
        //If the key doesn't exist, a value of 0 is returned
        lives = PlayerPrefs.GetInt("lives", 0);
        if(lives == 0)
            lives = 3;
    }


    void Check () {
        //Do your stuff here


        //Reduce lives
        lives--;

        //Save in PlayerPrefs, and COMMIT using PlayerPrefs.Save()
        PlayerPrefs.SetInt("lives", lives);
        PlayerPrefs.Save();

        //Reload level
        Application.LoadLevel(Application.loadedLevelName);
    }

}

答案 2 :(得分:0)

您可以像这样使用

using UnityEngine;
using System.Collections;

public class life : MonoBehaviour {
    int lifes;

    void Awake(){
        lifes = 3;
        DontDestroyOnLoad(this);
    }

    public void looseLife(){
        if (lifes != 0)
            lifes--;
        Debug.Log (lifes);
    }

}

这样,每当场景加载时,你的生命计数都会被保留。另一种方法是在退出场景时在playerprefs中说出你的数据并在加载时调用它。

答案 3 :(得分:0)

基本上我会有一个名为gameVariables的游戏对象

其中我会有一些简单的事情

public class gameVariables: MonoBehaviour
{
public int Lives;
public bool Creation = false;

void Awake()
{
    DontDestroyOnLoad(this);
}

void Start()
{
    if(Creation)
    {
        Lives = 3;
    }
}

public void Updatelives(int value)
{
     Lives += value; //value can be -1 or what not, al
}
}

现在你在创建这个游戏对象的场景中你可以将Creation bool设置为true,这样你就可以在游戏开始时创建这个对象,然后将对象保留在你的游戏之外。