2017-02-15 6 views
-1

Ich mache mein allererstes Spiel in Einheit. In diesem Spiel ist mein Spieler ein Ball, der einige Fragezeichen berührt. Wenn ein Fragezeichen ausgelöst wird, muss eine Frage und die Antworten angezeigt werden. Bis hier ist alles in Ordnung. Jetzt muss ich a oder b entsprechend der Frage drücken. Wenn die Antwort richtig ist, werden Punkte hinzugefügt. Aber hier ist das Problem. Unity wartet nicht darauf, dass ich die Tasten drücke. Unity geht durch den Code, bevor ich die Tasten drücke und das Spiel abstürzt.UNITY - Wie Einheit warten, bis ich drücke i Taste

+0

Stellen Sie sicher, dass Sie den minimalen Code Ihres Problems veröffentlichen, damit das Problem einfacher verstanden und identifiziert werden kann. – Vect0rZ

+0

Sie könnten den ursprünglichen Post bearbeiten, wenn Sie Code veröffentlichen, im Kommentarbereich wird er unlesbar. Was ist der Grund für das Zurücksetzen von Question.text und Answer.text nach der Eingabe? (Und um Ihre ursprüngliche Frage zu beantworten, ist es überhaupt keine gute Übung, auf die Eingabe zu warten). Erstens, vielleicht ist es nicht notwendig, den Text neu zu setzen, oder es gibt einen ganz bestimmten Grund dafür? – Vect0rZ

+0

Der Grund, sie zurückzusetzen, ist, dass ich keine Texte in meinem Gesicht habe, wenn ich mich fortbewege. Nun, wenn die Idee nicht gut ist, kannst du mir ein Beispiel geben, das tut was ich will? Um die Frage über die Tastatur zu beantworten. Ich muss das bis Samstag beenden. –

Antwort

1

Okay, lass uns vom Kommentarbereich weggehen und lass uns versuchen, zu improvisieren, auf meinem aktuellen Verständnis deines Problems.

Das erste, was Sie beachten müssen, ist das Folgende.

void OnTriggerEnter(Collider collider) 

Trigger NUR einmal, wenn die anderen Collider eintreten. Die Lösung? Verwenden Sie OnTriggerStay.

void OnTriggerStay(Collider collider) 

Dies wird immer nach der Eingabe suchen, wenn die Objekte kollidieren.

Das nächste, was zu berücksichtigen ist, ist das Zurücksetzen des Textes. Soweit ich es verstehe, sollten Sie es entfernen, wenn sie nicht mehr kollidieren, so dass Sie eine zusätzliche Methode haben könnten. OnTriggerExit, das zusätzlichen Code ausführt, wenn sie nicht mehr kollidieren.

void OnTriggerExit(Collider collider) 
{ 
    if (collider.gameObject.CompareTag("QuestionCube1")) 
    { 
     Question.text = ""; 
     Answer.text=""; 
    } 
} 

Also insgesamt

void OnTriggerEnter(Collider collider) 
{ 
    if (collider.gameObject.CompareTag("QuestionCube1")) 
    { 
     Question.text = "Which Number is bigger?"; 
     Answer.text = "A.5 B.10"; 

     if(Input.GetKeyDown(KeyCode.A)) 
     { 
      gameController.minusQuestion‌​Score(); 
     } 
     else if(Input.GeyKeyDown(KeyCode.B)) 
     { 
      gameController.addQuestionSc‌​ore(); 
     } 
    } 
} 
+0

Vielen Dank für Ihre Hilfe. –

1

Sie Coroutine verwenden können für die Eingabe zu warten, nachdem er ausgelöst wird.

void OnTriggerEnter(Collider collider) 
{ 

    if (collider.gameObject.CompareTag("QuestionCube1")) 
    { 
     Question.text = "Which Number is bigger?"; 
     Answer.text = "A.5 B.10"; 
     StartCoroutine(WaitForAnswer()); 
    } 
} 

IEnumerator WaitForAnswer() 
{ 
    for (;;) 
    { 
     if (Input.GetKeyDown(KeyCode.A)) 
     { 
      gameController.minusQuestion‌​Score(); 
      break; 
     } 
     else if (Input.GetKeyDown(KeyCode.B)) 
     { 
      gameController.addQuestionSc‌​ore(); 
      break; 
     } 
     yield return null; 
    } 

    Question.text = ""; 
    Answer.text = ""; 
    yield return null; 
} 
Verwandte Themen