当我的玩家目前的生命值达到0时,我想开始我的计时器倒计时。到目前为止,我的计时器已经连接到我的游戏面板,当玩家失去他所有的心(生命)时,它会向下滑动。当我播放应用程序(游戏)时,计时器会自动启动,并在我面板上的游戏向下滑动时停止。这不是我想要的。我想做的是当玩家失去所有的心(生命)并且面板上的游戏向下滑动时让计时器启动。
这是我的播放器健康脚本:
public int curHealth;
public int maxHealth = 3;
Vector3 startPosition;
public PlayerHealth playerhealthRef;
float counter;
public Animator anima; // drag the panel in here again
private UI_ManagerScripts UIM;
private PandaScript ps;
DateTime currentDate;
DateTime oldDate;
void Start ()
{
curHealth = maxHealth;
startPosition = transform.position;
ps = GameObject.FindGameObjectWithTag("PandaScript").GetComponent <PandaScript> ();
currentDate = System.DateTime.Now;
}
void Update ()
{
if (curHealth > maxHealth) {
curHealth = maxHealth;
}
if (curHealth <= 0) {
Die ();
}
}
void Awake()
{
UIM = GameObject.Find ("UIManager").GetComponent<UI_ManagerScripts> ();
}
void Die(){
if (PlayerPrefs.HasKey ("Highscore")) {
if (PlayerPrefs.GetInt ("Highscore") < ps.Score) {
PlayerPrefs.SetInt ("Highscore", ps.Score);
}
} else
{
PlayerPrefs.SetInt ("Highscore", ps.Score);
}
UIM.EnableBoolAnimator(anima);
PlayerPrefs.SetInt("RemainingLives", curHealth);
print("Remanining Lives: " + curHealth);
PlayerPrefs.Save();
}
void OnApplicationQuit()
{
PlayerPrefs.SetString("sysString", System.DateTime.Now.ToBinary().ToString());
print("Saving this date to prefs: " + System.DateTime.Now);
}
void LoadSaveData()
{
PlayerPrefs.GetInt ("RemainingLives",0);
OnApplicationQuit ();
}
public void Damage(int dmg)
{
curHealth -= dmg;
Reset();
}
void Reset ()
{
transform.position = startPosition;
GotoMouse.target = startPosition;
}
}
这是我的计时器脚本:
public Text timer;
int minutes = 1;
int seconds = 0;
float miliseconds = 0;
public int curHealth;
public int maxHealth = 3;
[Range(1, 59)]
public int defaultStartMinutes = 1;
public bool allowTimerRestart = false;
public bool useElapsedTime = true;
private int savedSeconds;
private bool resetTimer = false;
private DateTime centuryBegin = new DateTime(2001, 1, 1);
void Start ()
{
curHealth = maxHealth;
}
void Awake ()
{
minutes = defaultStartMinutes;
if (PlayerPrefs.HasKey("TimeOnExit"))
{
miliseconds = PlayerPrefs.GetFloat("TimeOnExit");
savedSeconds = (int)miliseconds;
if (useElapsedTime && PlayerPrefs.HasKey("CurrentTime"))
{
int elapsedTicks = (int)(DateTime.Now.Ticks / 10000000);
int ct = PlayerPrefs.GetInt("CurrentTime", elapsedTicks);
PlayerPrefs.DeleteKey("CurrentTime");
elapsedTicks -= ct;
if (elapsedTicks < miliseconds)
{
miliseconds -= elapsedTicks;
}
else
{
miliseconds = 0;
}
}
minutes = (int)miliseconds / 60;
miliseconds -= (minutes * 60);
seconds = (int)miliseconds;
miliseconds -= seconds;
PlayerPrefs.DeleteKey("TimeOnExit");
}
savedSeconds = 0;
}
public void Update()
{
// count down in seconds
miliseconds += Time.deltaTime;
if (resetTimer)
{
ResetTime();
}
if (miliseconds >= 1.0f)
{
miliseconds -= 1.0f;
if ((seconds > 0) || (minutes > 0))
{
seconds--;
if (seconds < 0)
{
seconds = 59;
minutes--;
}
}
else
{
resetTimer = allowTimerRestart;
}
}
if (seconds != savedSeconds)
{
// Show current time
timer.text = string.Format("{0}:{1:D2}", minutes, seconds);
savedSeconds = seconds;
}
}
void ResetTime()
{
minutes = defaultStartMinutes;
seconds = 0;
savedSeconds = 0;
miliseconds = 1.0f - Time.deltaTime;
resetTimer = false;
}
private void OnApplicationQuit()
{
int numSeconds = ((minutes * 60) + seconds);
if (numSeconds > 0)
{
miliseconds += numSeconds;
PlayerPrefs.SetFloat("TimeOnExit", miliseconds);
if (useElapsedTime)
{
int elapsedTicks = (int)(DateTime.Now.Ticks / 10000000);
PlayerPrefs.SetInt("CurrentTime", elapsedTicks);
}
}
}
}
答案 0 :(得分:1)
使用这个免费且非常有用的资产:https://www.assetstore.unity3d.com/en/#!/content/17276
然后写下这样的东西:
Observable.EveryUpdate()
.Where(_ => currentHealth <= 0)
.Subscribe(_ =>
{
//Do something...
//Ex. Die();
});
.Subscribe中的所有内容都会在条件返回true时执行。在Start()而不是Update()中使用它。
哦......如果你想要一些简单的计时器,可以写一下:
Observable.Timer(TimeSpan.FromMilliseconds(1000))
.Subscribe(_ =>
{
});
答案 1 :(得分:0)
你在Awake()和Update()方法中有你的代码,但我没有看到任何告诉它等待播放器丢失的东西。您可以在需要开始计时时设置标志或启用计时器脚本。
您似乎也在使用PlayerPrefs来处理一些他们不一定需要的东西。除非你想在游戏退出并重新启动后跟踪剩余的生命(这甚至没有多大意义),否则你最好使用一个实例,甚至是类变量。