一种跟踪现场负载的方法

本文关键字:现场 负载 方法 跟踪 一种 | 更新日期: 2023-09-27 18:06:10

是否有办法跟踪玩家还剩下多少命?

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

如果玩家失去了一条命,那么我应该做一些类似

的事情。

lives --;

所以如果初始值是3,现在他将剩下2条命。然后我需要重新加载相同的场景,这里是我的问题开始…

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

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

DontDestroyOnLoad(This);

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

加载场景第一次-> livesLeft = 3 ->加载游戏对象->玩家与游戏对象交互->检查()被调用->玩家失去生命-> livesLeft = livesLeft - 1 ->重新加载场景-> livesLeft = 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);
        }
    }
}

你可以使用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);
    }
}

你可以这样使用

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中的数据,并在加载时调用它。

我将创建一个名为gamvariables的游戏对象

里面我要写一些简单的东西,比如

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
}
}

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