有没有办法记录玩家剩下的生命?
我有一个游戏对象,它附有一个脚本,玩家与游戏对象交互。在脚本里面我有一个名为Check()的方法。使用事件触发器(指针点击)我调用该方法来检查玩家是否失去生命或赢得积分。游戏对象是使用附加到其上的脚本上的Start()方法设置的。
如果玩家失去了生命,那么我应该做一些像
这样的事情 lives --;
因此,如果初始值为3,那么现在他将剩下2个生命。然后我需要重新加载相同的场景,这就是我的问题开始的地方......
如果我在Start()方法上设置了生命量,当场景重新加载时,玩家将再次拥有3条生命,当然,这不应该发生,因为玩家在场景重新加载之前就失去了一条生命。
我可以使用一个名为livesLeft的变量创建一个空的游戏对象并附加一个脚本(让它称之为TempScript),以存储剩余的生命量,然后使用Awake()方法和已知的
DontDestroyOnLoad(This);
当场景重新加载变量时,livesLeft不会改变,所以如果玩家在重装时有两条生命,重装后他仍然会有两条命。使用此解决方案的问题是,如何设置初始生命量然后???
第一次加载场景 - > livesLeft = 3 - >加载游戏对象 - >玩家与游戏对象互动 - >调用Check() - >球员失去生命 - > livesLeft = livesLeft - 1 - >重新加载场景 - > livesLeft = 2 - > ...
对不起,也许这是一个非常简单的问题,但我看不到解决方案......
是的,我知道单身人士,但除非别无选择,否则我真的不想使用它们。
答案 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,这样你就可以在游戏开始时创建这个对象,然后将对象保留在你的游戏之外。