2016-03-22 17 views
1

Ich schreibe Läufer Spiel auf Unity (C#) für Mobiltelefone.Pause funktioniert nicht (Unity C#)

Ich habe Pause Button auf dem Bildschirm, mit Canvas - Taste.

Auch ich habe Code für Pause in Platformer2DUserControl Skript.

Hier ist es Code dieses Skript:

using UnityEngine; 
using UnitySampleAssets.CrossPlatformInput; 

namespace UnitySampleAssets._2D 
{ 

    [RequireComponent(typeof(PlatformerCharacter2D))] 
    public class Platformer2DUserControl : MonoBehaviour 
    { 
     private PlatformerCharacter2D character; 
     private bool jump; 
     public bool paused; 

     private void Awake() 
     { 
      character = GetComponent<PlatformerCharacter2D>(); 
      paused = false; 
     } 

     private void Update() 
     { 

      /*if (Input.GetButton("Fire1")) 
      { 

      }*/ 


      if (!jump) 
       // Read the jump input in Update so button presses aren't missed. 
       jump = Input.GetButton("Fire1"); //&& CrossPlatformInputManager.GetButtonDown("Jump"); 


     } 

     private void FixedUpdate() 
     { 
      // Read the inputs. 
      bool crouch = Input.GetKey(KeyCode.LeftControl); 
      // float h = CrossPlatformInputManager.GetAxis("Horizontal"); 
      // Pass all parameters to the character control script. 
      character.Move(1, false, jump); 
      jump = false; 

     } 
     public void Pause() 

     { 
      if (!jump) 
       // Read the jump input in Update so button presses aren't missed. 
       jump = Input.GetButton("Fire1"); //&& CrossPlatformInputManager.GetButtonDown("Jump"); 

      paused = !paused; 


      if (paused) 
      { 
       jump = !jump; 
       Time.timeScale = 0; 

      } 
      else if (!paused) 
      { 
       // jump = Input.GetButton("Fire1"); 
       Time.timeScale = 1; 
      } 
     } 
    } 
} 

Meine Pause-Taste funktioniert gut ist. Aber wenn ich darauf tippe, springt mein Charakter und das Spiel pausiert.

Ich möchte das machen, wenn ich das Tastenspiel nur pausieren und Charakter nicht springen.

Wie kann ich es machen. Danke für die Hilfe.

+1

Sie *** WIRKLICH, EHRLICH, KÖNNEN "UNITY SPIELE" NUR MIT DEM RIDICULOUS "Zeitmaßstab" TRICK *** "Ehrlich zu Gott. Das heißt, ehrlich zu Gott, nur *** NICHTS, wie sie Spiele bei Nintendo pausieren. Es ist eine wirklich unglaublich dumme Idee, die jemand vor Jahren in einem Unity-Forum erwähnt hat und die im Internet kopiert wurde. es ist völlig lächerlich. – Fattie

+0

"Pausieren" in der Spieltechnik ist eine ziemlich Kunstform. Für jede Klasse von Objekten, die Sie in der Szene haben, müssen Sie * speziell Pausencode * für diese Art von Dingen schreiben. das ist der einzige Weg, um Pausekonzepte in der Spieleentwicklung zu implementieren. – Fattie

+0

Okay, wie kann ich pausieren? @JoeBlow –

Antwort

0

Nun, Ihr Code ist durcheinander, aber entfernen Sie einfach das Sprung-Skript aus der Pause-Methode. So wird es nur pausieren ...

public void Pause() 

    { 
     paused = !paused; 

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

Beachten Sie, dass Input.GetButton nur in Update

EDIT aufgerufen werden soll

Das Problem, das Sie Ihren Bildschirm tippen haben auf den Knopf drücken . Und der Code-Sprung = Input.GetButton ("Fire1"); bedeutet im Wesentlichen "tippe ich auf den Bildschirm?" Also werden sowohl JUMP als auch PAUSE ausgelöst.

Eine Lösung wäre, eine Leinwand zu füllen, die den gesamten Bildschirm unter den Tasten ausfüllt. Sie werden nur dann eine JUMP-Aktion auslösen, wenn auf diese Arbeitsfläche geklickt wird. Wenn Sie also auf die Schaltfläche "Pause" klicken, wird die Übertragung gestoppt und nicht auf den gesamten Bildschirmbereich geklickt, wodurch die Sprungaktion nicht ausgelöst wird.

EDIT2

Versuchen Sie, die Linien (in der Update-Funktion) zu ändern:

if (!jump) 
      // Read the jump input in Update so button presses aren't missed. 
      jump = Input.GetButton("Fire1"); 

für:

if (!jump && !paused) 
       // Read the jump input in Update so button presses aren't missed. 
       jump = Input.GetButton("Fire1"); 

ich denke, die Schaltfläche Ereignis vor dem Update-Anweisung aufgerufen wird, see reference

+0

Sie reden über diesen Code 'if (! jump) jump = Input.GetButton ("Fire1"); '? –

+0

Ja, benutze Input.GetButton nur in der Update-Funktion – JoRouss

+0

Okay, ich habe den Code entfernt. Aber mein Problem ist immer noch. Wenn ich auf den Button tippe, springt mein Charakter. –

0

Ich würde Ihnen raten, die gleiche Eingabe nicht für Springen und Pausieren zu verwenden. Trennen Sie auch Ihre Funktionen zum Springen und Pausieren in separate Funktionen. Wenn Sie pausieren möchten, erstellen Sie eine UI-Schaltfläche auf dem Bildschirm und lassen Sie sie eine öffentliche Funktion für ein Pauseskript aufrufen, das die Pause aktiviert. Überprüfen Sie dann in der gleichen Funktion, ob Sie pausiert sind oder nicht und passen Sie Time.timescale entsprechend an

Sie müssen das Skript mit der Pausefunktion an ein Objekt anhängen, das sich immer in einem Bildschirm befindet (z. B. ein Panel in deiner Leinwand oder deiner MainCamera). Fügen Sie unter der Schaltfläche eine neue Funktion onClick() hinzu, nachdem Sie GO mit dem Skript apt in das Feld gezogen haben. Wählen Sie dann die oben genannte öffentliche Funktion aus.

private bool paused = false; 

//The function called by the button OnClick() 
public void TogglePause() 
{ 
    paused = !paused; 

    if(paused) 
     Time.timescale = 0f; 
    else 
     Time.timescale = 1f; 
} 

Hoffe das half!

0

Eine Lösung wäre möglich, stellen Sie sicher, Raycast-on der Pause-Taste.

+0

sollte ein Kommentar sein – Robert

Verwandte Themen