2014-10-30 3 views
1

Привет и спасибо за чтение этого сообщения.Остановить игрока/пользователя от многократного прыжка в моей игре Unity

Я новичок в Unity, но независимо от этого мне удалось сделать небольшую 2d-игру. Но у меня возникла небольшая проблема с функцией прыжка.

Игрок/пользователь не должен иметь возможность многократного прыжка в игре.

Это скрипт C#, который управляет проигрывателем.

using UnityEngine; 
using System.Collections; 

public class RobotController : MonoBehaviour { 
//This will be our maximum speed as we will always be multiplying by 1 
public float maxSpeed = 2f; 
public GameObject player; 
//a boolean value to represent whether we are facing left or not 
bool facingLeft = true; 
//a value to represent our Animator 
Animator anim; 
//to check ground and to have a jumpforce we can change in the editor 
bool grounded = true; 
public Transform groundCheck; 
float groundRadius = 0.2f; 
public LayerMask whatIsGround; 
public float jumpForce = 700f; 

// Use this for initialization 
void Start() { 
    //set anim to our animator 
    anim = GetComponent <Animator>(); 

} 


void FixedUpdate() { 
    //set our vSpeed 
    anim.SetFloat ("vSpeed", rigidbody2D.velocity.y); 
    //set our grounded bool 
    grounded = Physics2D.OverlapCircle (groundCheck.position, groundRadius, whatIsGround); 
    //set ground in our Animator to match grounded 
    anim.SetBool ("Ground", grounded); 


    float move = Input.GetAxis ("Horizontal");//Gives us of one if we are moving via the arrow keys 
    //move our Players rigidbody 
    rigidbody2D.velocity = new Vector3 (move * maxSpeed, rigidbody2D.velocity.y); 
    //set our speed 
    anim.SetFloat ("Speed",Mathf.Abs (move)); 
    //if we are moving left but not facing left flip, and vice versa 
    if (move > 0 && !facingLeft) { 

     Flip(); 
    } else if (move < 0 && facingLeft) { 
     Flip(); 
    } 
} 

void Update(){ 
    //if we are on the ground and the space bar was pressed, change our ground state and add an upward force 
    if(grounded && Input.GetKeyDown (KeyCode.UpArrow)){ 
     anim.SetBool("Ground",false); 
     rigidbody2D.AddForce (new Vector2(0,jumpForce)); 
    } 


} 

//flip if needed 
void Flip(){ 
    facingLeft = !facingLeft; 
    Vector3 theScale = transform.localScale; 
    theScale.x *= -1; 
    transform.localScale = theScale; 
} 
} 

И вот объект Игрока и объект GroundCheck.

enter image description here enter image description here

Как я могу остановить игрока от возможности multijump. Поэтому, если он нажимает клавишу upArrow, он будет прыгать и не сможет прыгать снова, прежде чем приземлится. Спасибо за ваше время и помочь

Update

Если его трудно увидеть изображения здесь являются изображения на Imgur: http://imgur.com/GKf4bgi,2i7A0AU#0

+0

Вы пробовали переместить код перехода в 'FixedUpdate' вместо' Update'? Это может иметь какой-то эффект, так как вы проверяете, заземлен ли плеер. – Catwood

ответ

2

Вы можете добавить еще один коллайдер на свой плеер GameObject и сделать его триггер с Is Trigger опцией. Используйте этот код, чтобы изменить переменные рассказывающий флаг, если игрок находится на земле:

private bool isOnGround = false; 
void OnCollisionEnter2D(Collision2D collision) { 
    isOnGround = true;  
} 

void OnCollisionExit2D(Collision2D collision) { 
    isOnGround = false; 
} 

Тогда вы можете позволить прыгать только тогда, когда isOnGround верно.

2

Вы могли бы сделать небольшой предмет игры под названием groundController, поместите его под игрок. Вы устанавливаете там значение bool для заземления и в коде, проверяя, совпадает ли ваш контроллер с землей.

смотреть здесь для получения дополнительной информации: http://youtu.be/Xnyb2f6Qqzg?t=45m22s

Смежные вопросы