2016-08-04 15 views
0

Ich habe einen Würfel, der auf der Szene ist und wenn Sie eine der Pfeiltasten drücken, bewegt es sich nach oben und in Richtung der Pfeiltaste. Wenn Sie klicken, während der Würfel bereits in der Luft ist, springt er erneut, bevor er wieder auf den Boden kommt. Wie mache ich es so, dass der Würfel nicht wieder springen kann, bis er wieder auf dem Boden ist? Dies ist mein Code so weit:Wenn sich ein Würfel bewegt, wie kann ich es so machen, dass es nicht springen kann, wenn es in der Luft ist?

public class MovePlayer : MonoBehaviour { 

Vector3 endPos; 
Vector3 startPos; 


bool jumping = false; 

// Update is called once per frame 
void Update() { 
    endPos = gameObject.transform.position; 
    startPos = gameObject.transform.position; 

     if (Input.GetButtonDown ("up") && gameObject.transform.position == endPos) { 

      transform.Translate(Vector3.up * 50 * Time.deltaTime, Space.World); 
      transform.Translate(Vector3.forward * 50 * Time.deltaTime, Space.World); 
     } 
    else if (Input.GetButtonDown ("down") && gameObject.transform.position == endPos) { 
     transform.Translate(Vector3.up * 50 * Time.deltaTime, Space.World); 
     transform.Translate(-Vector3.forward * 50 * Time.deltaTime, Space.World); 
    } 
    else if (Input.GetButtonDown ("left") && gameObject.transform.position == endPos) { 
     transform.Translate(Vector3.up * 50 * Time.deltaTime, Space.World); 
     transform.Translate(Vector3.left * 50 * Time.deltaTime, Space.World); 
    } 
    else if (Input.GetButtonDown ("right") && gameObject.transform.position == endPos) { 
     transform.Translate(Vector3.up * 50 * Time.deltaTime, Space.World); 
     transform.Translate(Vector3.right * 50 * Time.deltaTime, Space.World); 
    } 

} 
} 

Antwort

0

Machen Sie den Booleschen jumping falsch, wenn der Spieler in Kontakt steht,/mit dem Boden kollidiert. Wenn nicht, mach es wahr. Dann fügen Sie hinzu und überprüfen Sie es mit der Sprungeingangsbedingung, so wird True nicht springen lassen und False wird springen lassen.

Zum Erkennen von Boden verwenden Sie einen Code wie unten. Markieren Sie den Boden wie Sie möchten. Sowohl Player als auch Boden benötigen collider Komponente und mindestens eine von ihnen wird Rigidbody Komponente benötigt.

void OnCollisionEnter (Collision other) 
{ 
if (other.collider.tag == "ground_tag") 
{ 
Jumping = false; 
} 
} 

void OnCollisionExit (Collision other) 
{ 
if (other.collider.tag == "ground_tag") 
{ 
Jumping = true; 
} 
} 
0

Sie können Raycast von den Füßen Ihres Charakters zu Boden verwenden. Und wenn dieser Strahl auf etwas trifft - bist du auf dem Boden.

var origin = transform.position; 
var onGround = Raycast(origin, Vector3.down, 1f); 

Beachten Sie, dass Sie benötigen einen Strahl von den Füßen zu werfen, so dass Sie wahrscheinlich origin Wert ändern müssen.

Dieser Ansatz ist gut, da Sie Ebenenmasken und viele andere Optionen verwenden können.