How do I stop a scene from switching from switch before the Countdown timer reaches zero
Hello I am having a problem figuring out how to stop the scene from switch when I kill one enemy . I have one of my enemy score value at 40 and I also have a countdown timer in my scene . I need to access countdown timer and score manager script . What I am trying to do is have an set score the player has to reach in the scene. For example if the first level require 50 points before the countdown timer reaches zero then the player moves on to the next level . I just need to access both of those scripts. Have my countdown timer and score manager script here :
Score Script
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class ScoreManager : MonoBehaviour {
public static int score;
public Text text;
void Awake ()
{
text = GetComponent <Text> ();
score = 0;
}
void Update ()
{
text.text = "Score :" + score;
}
}
Countdown Timer Script
using UnityEngine;
using UnityEngine.UI;
public class MyClock : MonoBehaviour
{
public int Minutes = 0;
public int Seconds = 0;
private Text m_text;
private float m_leftTime;
private void Awake()
{
m_text = GetComponent<Text>();
m_leftTime = GetInitialTime();
}
private void Update()
{
if (m_leftTime > 0f)
{
// Update countdown clock
m_leftTime -= Time.deltaTime;
Minutes = GetLeftMinutes();
Seconds = GetLeftSeconds();
// Show current clock
if (m_leftTime > 0f)
{
m_text.text = "Time : " + Minutes + ":" + Seconds.ToString("00");
}
else
{
// The countdown clock has finished
m_text.text = "Time : 0:00";
}
}
}
private float GetInitialTime()
{
return Minutes * 60f + Seconds;
}
private int GetLeftMinutes()
{
return Mathf.FloorToInt(m_leftTime / 60f);
}
private int GetLeftSeconds()
{
return Mathf.FloorToInt(m_leftTime % 60f);
}
}
Answer by TBruce · May 05, 2016 at 04:10 PM
First move everything from Awake() to Start(). Replace MyClock with the following
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class MyClock : MonoBehaviour
{
public int Minutes = 0;
public int Seconds = 0;
private Text m_text;
private float m_leftTime;
void Start ()
{
m_text = GetComponent<Text>();
m_leftTime = GetInitialTime();
StartTimer();
}
IEnumerator StartTimer()
{
bool done = false;
float decrementTime = 1.0f; // default yield time (one second)
float timeLeft = m_leftTime;
while (timeLeft > 0)
{
if (m_text != null)
{
m_text.text = string.Format("{0:D2}:{1:D2}", (timeLeft / 60), (timeLeft % 60));
}
yield return new WaitForSeconds(decrementTime);
timeLeft -= decrementTime;
}
yield return new WaitForSeconds(0.01f); // added this just incase
}
}
I am sorry but this
StartTimer();
should have been this
StartCoroutine(StartTimer());
IEnumerator StartTimer is a Coroutine and will not work without calling it with StartCoroutine().
This was my bad but I had to point this out.
The timer code should look like this :
using UnityEngine; using System.Collections; using UnityEngine.UI;
public class $$anonymous$$yClock : $$anonymous$$onoBehaviour { public int $$anonymous$$inutes = 0; public int Seconds = 0; private Text m_text; private float m_leftTime;
void Start ()
{
m_text = GetComponent<Text>();
m_leftTime = GetInitialTime();
StartCoroutine(StartTimer());
}
IEnumerator StartTimer()
{
bool done = false;
float decrementTime = 1.0f; // default yield time (one second)
float timeLeft = m_leftTime;
while (timeLeft > 0)
{
if (m_text != null)
{
m_text.text = string.Format("{0:D2}:{1:D2}", (timeLeft / 60), (timeLeft % 60));
}
yield return new WaitForSeconds(decrementTime);
timeLeft -= decrementTime;
}
yield return new WaitForSeconds(0.01f); // added this just incase
}
}
I'm getting an error CS0103 Get error : The name `GetInitialTime' does not exist in the current context . Where would I add scenes at when the player wins or loses ?
Answer by importguru88 · May 05, 2016 at 07:13 PM
I do it like this. How would I code the Score require ?
using UnityEngine; using System.Collections; using UnityEngine.UI;
public class ScoreManager : MonoBehaviour { public static int score; public Text text;
void Start ()
{
text = GetComponent <Text> ();
score = 0;
text.text = "Score :" + score;
}
{
text.text = "Score :" + score;
}
using UnityEngine; using System.Collections; using UnityEngine.UI;
public class MyClock : MonoBehaviour { public int Minutes = 0; public int Seconds = 0; private Text m_text; private float m_leftTime;
void Start ()
{
m_text = GetComponent<Text>();
m_leftTime = GetInitialTime();
StartTimer();
}
IEnumerator StartTimer()
{
bool done = false;
float decrementTime = 1.0f; // default yield time (one second)
float timeLeft = m_leftTime;
while (timeLeft > 0)
{
if (m_text != null)
{
m_text.text = string.Format("{0:D2}:{1:D2}", (timeLeft / 60), (timeLeft % 60));
}
yield return new WaitForSeconds(decrementTime);
timeLeft -= decrementTime;
}
yield return new WaitForSeconds(0.01f); // added this just incase
}
}
Normally I would ask that you create a new question and ask this, but here is the approach that I would take
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class Score$$anonymous$$anager : $$anonymous$$onoBehaviour
{
public int currentScore = 0;
public Text text;
void Start ()
{
text = GetComponent <Text> ();
currentScore = 0;
UpdateScore(0);
}
void UpdateScore(int score)
{
currentScore += score;
if (text != null)
{
text.text = "Score :" + currentScore;
}
}
}
Now somewhere else you would do something along these lines
Score$$anonymous$$anager score$$anonymous$$anager;
score$$anonymous$$anager = gameObject.GetComponent<Score$$anonymous$$anager>(); // this may not be exactly how you get a reference to Score$$anonymous$$anager
score$$anonymous$$anager.UpdateScore(addScoreVale);
Your answer
Follow this Question
Related Questions
How do I switch scenes with countdown timer and Score at the same time 0 Answers
How do I call an if and else statement on a Countdown timer Script 0 Answers
How to get left time from countdown to point? 0 Answers
How to add a scene fader to a timer 0 Answers
How do I stop my timer script from crashing unity? 0 Answers