2017-02-28 1 views
0

Derzeit entwickle ich ein Quiz-Spiel für mein Gamification-Projekt. wo ich das eigentliche Spiel einfriere, wenn der Spieler eine Punktzahl erreicht und eine Frage erscheint. Wenn die Antwort richtig ist, erhöht es die Geschwindigkeit des Players. Und es wird in einer Schleife passieren.Wie man zufällige Daten erzeugt, ohne in Einheit zu wiederholen C#

Hier verwende ich Loadscene, um die Index-Szene zu laden, um die Wiederholung von Fragen zu vermeiden. Das Problem hier ist, wenn die Szene geladen ist, lädt das ganze Spiel neu, anstatt den Quizteil neu zu laden. Gibt es einen Weg, es zu tun?

public class GameManager : MonoBehaviour 
{ 
    public Question[] facts; 
    private static List<Question> unansweredfacts; 
    private Question currentfacts; 

    [SerializeField] 
    private Text FactText; 

    [SerializeField] 
    private float TimeBetweenFacts = 3f; 

    [SerializeField] 
    private Text TrueAnswerText; 

    [SerializeField] 
    private Text FalseAnswerText; 

    [SerializeField] 
    private Animator animator; 

    [SerializeField] 
    public GameObject canvasquiz; 

    void Start() 
    { 
     if (unansweredfacts == null || unansweredfacts.Count == 0) 
     { 
      unansweredfacts = facts.ToList<Question>(); 
     } 
     SetCurrentfact(); 
     Debug.Log(currentfacts.Fact + "is" + currentfacts.IsTrue); 
    } 

    void SetCurrentfact() 
    { 
     int RandomFactIndex = Random.Range(0, unansweredfacts.Count); 
     currentfacts = unansweredfacts[RandomFactIndex]; 
     FactText.text = currentfacts.Fact; 
     if (currentfacts.IsTrue) 
     { 
      TrueAnswerText.text = "CORRECT !"; 
      FalseAnswerText.text = "WRONG !"; 
     } 
     else 
     { 
      TrueAnswerText.text = "WRONG !"; 
      FalseAnswerText.text = "CORRECT !"; 
     } 
    } 

    IEnumerator TransitionToNextFact() 
    { 
     unansweredfacts.Remove(currentfacts); 
     yield return new WaitForSeconds(TimeBetweenFacts); 
     SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex); 
    } 

    public void UserSelectTrue() 
    { 
     animator.SetTrigger("True"); 
     if (currentfacts.IsTrue) 
     { 
      Debug.Log("CORRECT !"); 
     } 
     else 
     { 
      Debug.Log("WRONG !"); 
     } 
     StartCoroutine(TransitionToNextFact()); 
    } 

    public void UserSelectFalse() 
    { 
     animator.SetTrigger("False"); 
     if (!currentfacts.IsTrue) 
     { 
      Debug.Log("CORRECT !"); 
     } 
     else 
     { 
      Debug.Log("WRONG !"); 
     } 
     StartCoroutine(TransitionToNextFact()); 
    } 
+0

Mögliches Duplikat von [Randomize a List ] (http://stackoverflow.com/questions/273313/randomize-a-listt) –

Antwort

1

die Szene Laden wieder es im Grunde neu startet, was Sie tun möchten, ist die TransitionToNextFact Methode in der Art und Weise ich auch die beiden Methoden UserSelectTrue und UserSelectFalse kombinieren würde

IEnumerator TransitionToNextFact() { unansweredfacts.Remove(currentfacts); // remove the last shown question for the list canvasquiz.SetActive(false); // disables the quiz canvas until the next question yield return new WaitForSeconds(TimeBetweenFacts); SetCurrentfact(); // sets the next random question from the list canvasquiz.SetActive(true); // show the quiz canvas along with the new question } 

folgende ändern
in eins

public void UserSelected(bool isTrue) 
{ 
    animator.SetTrigger(isTrue ? "True" : "False"); 
    if (currentfacts.IsTrue == isTrue) 
    { 
     Debug.Log("CORRECT !"); 

    } 
    else 
    { 
     Debug.Log("WRONG !"); 

    } 


    StartCoroutine(TransitionToNextFact()); 
} 
+0

Vielen Dank! Hat mir viel geholfen. Das einzige Problem, dem ich gegenüberstand, ist, dass die Methode UserSelected() aus irgendeinem Grund die Animation nicht startet und die Couroutine nicht startet. Aber wenn ich die vorherigen Methoden UserSelectTrue() und UserSelectFalse() benutze, funktioniert es gut. Ich denke, das Problem ist in IsTrue.ToString(). – METEOARA

+0

überhaupt kein Problem! Ich habe die Antwort bearbeitet, die das Triggerproblem definitiv beheben sollte. Wenn Sie diese Antwort hilfreich finden, denken Sie bitte daran, sie als solche zu markieren :) –

+0

Sorry Mann! Alles funktioniert gut. Es war mein Fehler, dass ich vergaß, die Methode in On Click() hinzuzufügen. – METEOARA

Verwandte Themen