2016-07-07 9 views
2

Hallo Ich möchte Abzeichen wie in flappy Vogel erstellen, legte ich Bilder in UI-Bildern wie GameObjects. Aber es zeigt mir nur ein Bild von 3 Bildern Bitte Please Help Out! Und Highscore funktioniert, ist es umschreibt, wenn ich höhere Punktzahl, aber weiß nicht, warum die Bilder nicht ändern :(Unity High_Score Badges C#

Sorry For schlechtes Englisch

using UnityEngine; 
using UnityEngine.UI; 
using System.Collections; 

public class ScoreManager : MonoBehaviour 
{ 


    private float score = 0f; 
    public Text Scoretext; 
    public MenuController deathmenu; 
    public GameObject IntroGUI, DeathGUI, Canvas; 
    public GameObject[] medals; 
    public GameObject medale; 
    void Start() 
    { 
     medale.SetActive(false); 
     foreach(GameObject m in medals) 
     { 
      m.SetActive(true); 
     } 

    } 


    void Update() 
    { 
     //handle back key in Windows Phone 
     if (Input.GetKeyDown(KeyCode.Escape)) 
      Application.Quit(); 

     if (GameStateManager.GameState == GameState.Intro) 
     {if (WasTouchedOrClicked()) 
      { 
       GameStateManager.GameState = GameState.Playing; 
       IntroGUI.SetActive(false); 
       Canvas.SetActive(true); 
      } 
     } 

     else if (GameStateManager.GameState == GameState.Playing) 
     { 


      score += Time.deltaTime; 
      Scoretext.text = ((int)score).ToString(); 

      if (PlayerPrefs.GetFloat("Highscore") < score) 
       PlayerPrefs.SetFloat("Highscore", score); 

      if(PlayerPrefs.GetFloat("Scoretext") > 0) 
      { 
       medals[0].SetActive(true); 
      } 
      else if 
       (PlayerPrefs.GetFloat("Scoretext") > 2) 
      { 
       medals[1].SetActive(true); 
      } 
      else if 
       (PlayerPrefs.GetFloat("Scoretext") > 5) 
      { 
       medals[2].SetActive(true); 
      } 

      medale.SetActive(true); 


      deathmenu.ToggleEndMenu(score); 
     } 

    } 

In Bild können Sie meine Gameobjects und Etc. sehen

Unity

ich den Code aktualisiert, aber immer noch nicht funktioniert

using UnityEngine; 
using UnityEngine.UI; 
using System.Collections; 

public class ScoreManager : MonoBehaviour 
{ 


    private float score = 0f; 
    public Text Scoretext; 
    public MenuController deathmenu; 
    public GameObject IntroGUI, DeathGUI, Canvas; 
    public GameObject[] medals; 
    public GameObject medale; 
    void Start() 
    { 
     medale.SetActive(true); 

    } 


    void Update() 
    { 
     //handle back key in Windows Phone 
     if (Input.GetKeyDown(KeyCode.Escape)) 
      Application.Quit(); 

     if (GameStateManager.GameState == GameState.Intro) 
     { 
      if (WasTouchedOrClicked()) 
      { 
       GameStateManager.GameState = GameState.Playing; 
       IntroGUI.SetActive(false); 
       Canvas.SetActive(true); 
       medale.SetActive(false); 
      } 
     } 

     else if (GameStateManager.GameState == GameState.Playing) 
     { 


      score += Time.deltaTime; 
      Scoretext.text = ((int)score).ToString(); 

      if (PlayerPrefs.GetFloat("Highscore") < score) 
       PlayerPrefs.SetFloat("Highscore", score); 

      deathmenu.ToggleEndMenu(score); 


     } 
    } 




     void FixedUpdate() 
    { 
      //just jump up and down on intro screen 
      if (GameStateManager.GameState == GameState.Intro) 
      { 

      } 
      else if 
      (GameStateManager.GameState == GameState.Playing || GameStateManager.GameState == GameState.Dead) 
      { 
      } 
     } 

     bool WasTouchedOrClicked() 
    { 
      if (Input.GetButtonUp("Jump") || Input.GetMouseButtonDown(0) || 
      (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began)) 
       return true; 
      else 
       return false; 
     } 

     void OnCollisionEnter2D(Collision2D col) 
    { 
      if (GameStateManager.GameState == GameState.Playing) 
      { 
       if (col.gameObject.tag == "CARS") 
       { 
        PlayerDies(); 
       } 
      } 
     } 




     void PlayerDies() 
    { 

      GameStateManager.GameState = GameState.Dead; 




      if (PlayerPrefs.GetFloat("Scoretext") > 0) 
      { 
       medals[0].SetActive(true); 
      } 
      else if 
       (PlayerPrefs.GetFloat("Scoretext") > 2) 
      { 
       medals[1].SetActive(true); 
      } 
      else if 
       (PlayerPrefs.GetFloat("Scoretext") > 5) 
      { 
       medals[2].SetActive(true); 
      } 

     } 
    } 

Antwort

0

Es stellt sich heraus, dass die unten aufgeführten Dinge nicht ausreichen, um Ihre Sachen zu verarbeiten. Sie müssen medale.SetActive (false) ändern; zu medale.SetActive (wahr); weil dies das Elternobjekt ist, in dem sich Ihre Medaillen befinden.

Sie setzen den Notentext nirgendwo, also schauen Sie sich die Punktzahl an, anstatt den Notentext.

So erhalten Sie:

score += Time.deltaTime; 
 
      Scoretext.text = ((int)score).ToString(); 
 

 
      if (PlayerPrefs.GetFloat("Highscore") < score) 
 
       PlayerPrefs.SetFloat("Highscore", score); 
 

 
      if(score > 0) 
 
      { 
 
       medals[0].SetActive(true); 
 
      } 
 
      else if 
 
       (score > 2) 
 
      { 
 
       medals[1].SetActive(true); 
 
      } 
 
      else if 
 
       (score > 5) 
 
      { 
 
       medals[2].SetActive(true); 
 
      }

Auch, warum Sie sie aktiv zu Beginn setzen?

+0

Ich habe Youtube Video angeschaut, und überprüft, wie man diese Punkte Medaillen bekommen, und ich bin Neuling zur Einheit, ich werde Ihren Code später überprüfen hoffe, es wird funktionieren –

+0

Keine Ihrer 'else if' Klauseln werden jemals ausgeführt werden. –