2016-04-13 14 views
0

タイトルとして、プレーヤーのゲームオブジェクトが破壊されると、ゲームが一時停止して画面を表示するようにしたいと考えていますGameOverScreen)、しかし、私はそれの周りに私の頭を得るように見えることはできません。しかし、画面は表示されますが、ゲームは一時停止しません。これを引き起こす原因は何ですか?ここに私のコードは次のとおりです。それでも動作しない場合はUnity:プレイヤーオブジェクトが破壊された後にゲームを一時停止する

void OnPauseGame() 
{ 
    GameOverMenu.SetActive(true); 
} 

:これを追加し、

if (gameover) { 
    Time.timeScale = 0; 
}else{ 
    Time.timeScale = 1; 
} 

次:の場合

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); 
    } 
} 
+0

を使用する「GameOverMenuは」gameOverMenu' – Fattie

+0

は、単に新しいシーンでゲームオーバー画面をロードする必要があります '、最初の文字で小文字でなければなりません。コード不要 –

答えて

1

まず、あなただけ行う、2を必要としません次に、を追加します。

void Update(){ 
    if(Time.timeScale == 0)return; 
} 
1

正確な浮動小数点値をt彼の、イベント時にゲームを一時停止するには私の意見に

Time.timeScale = 0.0f; 
0

最も簡単な方法は、コンソール上で「エラー一時停止」ボタンを使用して行くです。 もちろん、エラーを生成する必要がありますが、これは簡単です。 ただ

Debug.LogError("Game Paused"); 

幸運

関連する問題