一种跟踪现场负载的方法
本文关键字:现场 负载 方法 跟踪 一种 | 更新日期: 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,这样你就可以在游戏开始时创建这个对象,然后在整个游戏中保持这个对象。