- Home /
How to stop the countdown timer when I have collected all the coins?
So, I have followed the roll-a-ball tutorial, I also added a countdown timer and give it a C# script so that if you couldn't collect all the coins within the time limit, it will automatically change scene to "Game Over" scene. However, when I collect all the coins, the timer still running. I want to stop the countdown timer when I collect all of the coins so it will prevent the change scene.
This is my PlayerController Script
 using System.Collections;
 using UnityEngine.UI;
 using System.Collections.Generic;
 using UnityEngine;
 
 public class PlayerController : MonoBehaviour
 {
 
     public float speed;
     public Text countText;
     public GameObject winButton;
     public GameObject mainMenu;
 
     private Rigidbody rb;
     private int count;
 
     void Start()
     {
         rb = GetComponent<Rigidbody>();
         count = 0;
         SetCountText();
         winButton.SetActive(false);
         mainMenu.SetActive(false);
         winCards.SetActive(false);
     }
 
 
     void FixedUpdate()
     {
         float moveHorizontal = Input.GetAxis("Horizontal");
         float moveVertical = Input.GetAxis("Vertical");
 
         Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
 
         rb.AddForce(movement * speed);
     }
 
     void OnTriggerEnter(Collider other)
     {
         if (other.gameObject.CompareTag("Collectible"))
         {
             other.gameObject.SetActive(false);
             count = count + 1;
             SetCountText();
         }
     }
 
     void SetCountText()
     {
         countText.text = "COLLECT: " + count.ToString() + "/12";
         if (count >= 12)
         {
 
             winButton.SetActive(true);
             mainMenu.SetActive(true);
             winCards.SetActive(true);
         }
 
     }
 
 }
and this is my Count down timer script
 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine.UI;
 using UnityEngine;
 
 public class TimerEnd : MonoBehaviour
 {
 
     public string GameOver;
     private float timer = 0f;
     private Text timerSeconds;
 
 
     // Use this for initialization
     void Start()
     {
         timerSeconds = GetComponent<Text>();
     }
 
     // Update is called once per frame
     void Update()
     {
         timer += Time.deltaTime;
         timerSeconds.text = timer.ToString("f2");
         if (timer <= 0)
         {
             Application.LoadLevel("Game Over");
         }
        
     }
 }
What should I do? I'm still confused, please give me a clear answer bcs I am still new at this.
THANKYOU
Answer by Casiell · Sep 23, 2018 at 09:05 PM
In your PlayerController create a
 public static bool CollectedAll = false;
In Update of TimerEnd write at the beginning:
 if(PlayerController.CollectedAll)
     return;
Then just set this bool to true when you collect last coin.
Answer by KittenSnipes · Sep 25, 2018 at 09:19 PM
This should get you started. If you need any more help with furthering the script I would be glad to help.
  using System.Collections;
  using UnityEngine.UI;
  using System.Collections.Generic;
  using UnityEngine;
  
  public class PlayerController : MonoBehaviour
  {
      public float speed;
      public Text countText;
      public GameObject winButton;
      public GameObject mainMenu;
  
      private Rigidbody rb;
      private int count;
      private bool hasWon = false;
  
      void Start()
      {
          rb = GetComponent<Rigidbody>();
          count = 0;
          SetCountText();
          winButton.SetActive(false);
          mainMenu.SetActive(false);
          winCards.SetActive(false);
      }
  
      void FixedUpdate()
      {
          float moveHorizontal = Input.GetAxis("Horizontal");
          float moveVertical = Input.GetAxis("Vertical");
  
          Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
  
          rb.AddForce(movement * speed);
      }
  
      void OnTriggerEnter(Collider other)
      {
          if (other.gameObject.CompareTag("Collectible"))
          {
              other.gameObject.SetActive(false);
              count = count + 1;
              SetCountText();
          }
      }
  
      void SetCountText()
      {
          countText.text = "COLLECT: " + count.ToString() + "/12";
          if (count >= 12)
          {
              winButton.SetActive(true);
              mainMenu.SetActive(true);
              winCards.SetActive(true);
              hasWon = true;
          }
      }
 
      public bool HasWon() {
          return hasWon;
      }
  }
Count down timer script
  using System.Collections;
  using System.Collections.Generic;
  using UnityEngine.UI;
  using UnityEngine;
  
  public class TimerEnd : MonoBehaviour
  {
  
      public string GameOver;
      private float timer = 0f;
      private Text timerSeconds;
      public PlayerController control;
  
      // Use this for initialization
      void Start()
      {
          timerSeconds = GetComponent<Text>();
          if (control == null) {
              control = GetComponent<PlayerController>();
          }
      }
  
      // Update is called once per frame
      void Update()
      {
          if (control.HasWon() == false){
              timer += Time.deltaTime; 
          }
 
          timerSeconds.text = timer.ToString("f2");
          if (timer <= 0)
          {
              Application.LoadLevel("Game Over");
          }
      }
  }
Your answer
 
 
             