Advertisement
Help Keep Boards Alive. Support us by going ad free today. See here: https://subscriptions.boards.ie/.
If we do not hit our goal we will be forced to close the site.

Current status: https://keepboardsalive.com/

Annual subs are best for most impact. If you are still undecided on going Ad Free - you can also donate using the Paypal Donate option. All contribution helps. Thank you.
https://www.boards.ie/group/1878-subscribers-forum

Private Group for paid up members of Boards.ie. Join the club.

Unity: Pausing the game after player object gets destroyed

  • 13-04-2016 04:53PM
    #1
    Registered Users, Registered Users 2 Posts: 101 ✭✭


    Hey guys, as the title says, I want to make it so that when the player game object gets destroyed, the game will then pause and bring up a screen (I've made one called GameOverScreen), however, I cannot seem to get my head around it. The screen displays however the game doesn't pause. Any idea what could be causing this? Here is my code:

    using UnityEngine;
    using UnityEngine.UI;

    public class PlayerHealth : MonoBehaviour
    {
    public float m_StartingHealth = 100f; // The amount of health each tank starts with.

    public Slider m_Slider; // The slider to represent how much health the tank currently has.

    public Image m_FillImage; // The image component of the slider.

    public Color m_FullHealthColor = Color.green; // The color the health bar will be when on full health.

    public Color m_ZeroHealthColor = Color.red; // The color the health bar will be when on no health.

    public GameObject m_ExplosionPrefab; // A prefab that will be instantiated in Awake, then used whenever the tank dies.

    public Camera mainCamera;

    public Camera gameOverCamera;

    public GameObject GameOverMenu;

    private bool gameover = false;
    private AudioSource m_ExplosionAudio; // The audio source to play when the tank explodes.
    private ParticleSystem m_ExplosionParticles; // The particle system the will play when the tank is destroyed.
    private float m_CurrentHealth; // How much health the tank currently has.
    private bool m_Dead; // Has the tank been reduced beyond zero health yet?

    void Start()
    {
    GameOverMenu.SetActive(false);
    }

    private void Awake()
    {
    // Instantiate the explosion prefab and get a reference to the particle system on it.
    m_ExplosionParticles = Instantiate(m_ExplosionPrefab).GetComponent<ParticleSystem>();

    // Get a reference to the audio source on the instantiated prefab.
    m_ExplosionAudio = m_ExplosionParticles.GetComponent<AudioSource>();

    // Disable the prefab so it can be activated when it's required.
    m_ExplosionParticles.gameObject.SetActive(false);
    }


    private void OnEnable()
    {
    // When the tank is enabled, reset the tank's health and whether or not it's dead.
    m_CurrentHealth = m_StartingHealth;
    m_Dead = false;

    // Update the health slider's value and color.
    SetHealthUI();
    }


    public void TakeDamage(float amount)
    {
    // Reduce current health by the amount of damage done.
    m_CurrentHealth -= amount;

    // Change the UI elements appropriately.
    SetHealthUI();

    // If the current health is at or below zero and it has not yet been registered, call OnDeath.
    if (m_CurrentHealth <= 0f && !m_Dead)
    {
    {
    gameover = !gameover;
    }


    if (gameover)
    {
    GameOverMenu.SetActive(true);
    Time.timeScale = 0;
    }

    if (!gameover)
    {
    GameOverMenu.SetActive(false);
    Time.timeScale = 1;
    }
    OnDeath();
    mainCamera.transform.parent = null;
    mainCamera.enabled = true;
    gameOverCamera.enabled = false;

    }
    }


    private void SetHealthUI()
    {
    // Set the slider's value appropriately.
    m_Slider.value = m_CurrentHealth;

    // Interpolate the color of the bar between the choosen colours based on the current percentage of the starting health.
    m_FillImage.color = Color.Lerp(m_ZeroHealthColor, m_FullHealthColor, m_CurrentHealth / m_StartingHealth);
    }


    private void OnDeath()
    {
    // Set the flag so that this function is only called once.
    m_Dead = true;

    // Move the instantiated explosion prefab to the tank's position and turn it on.
    m_ExplosionParticles.transform.position = transform.position;
    m_ExplosionParticles.gameObject.SetActive(true);

    // Play the particle system of the tank exploding.
    m_ExplosionParticles.Play();

    // Play the tank explosion sound effect.
    m_ExplosionAudio.Play();

    // Turn the tank off.
    gameObject.SetActive(false);
    }
    }


Advertisement