AddForce в Rigidbody2D не работает вообще - PullRequest
2 голосов
/ 27 апреля 2019

Я следовал инструкциям, я пробирался через десятки форумов, и впоследствии я вырывал то, что осталось от моих волос!

Как вы можете видеть в коде, я пытаюсь использовать скорость для движения и AddForce для прыжкового движения. Если я использую скорость, она прыгает очень быстро и на максимуме, я просто не хочу, чтобы это произошло. Я хочу плавного прыжка, более реалистичного, поэтому я увидел, что вместо этого используется AddForce. Кроме .... Это даже не работает, он просто не прыгает сейчас ... ничего.

Я работал со скоростью. Код был rb.velocity = прыжки * jumpForce;

Как я уже сказал, это сработало, но смехотворно быстро прыгал и выглядело не совсем правильно.

public class PlayerController : MonoBehaviour
{

    public float speed = 3.0f;
    public float jumpForce = 4.0f;
    public Rigidbody2D rb;
    public Vector2 movement;
    public bool isJumping;
    public Animator animate;
    public Vector2 jumping = new Vector2(0,1);


    // Start is called before the first frame update
    void Start()
    {
        rb = this.GetComponent<Rigidbody2D>();
        //animate = this.GetComponent<Animator>();
    }

    // Update is called once per frame
    void Update()
    {
        //animate.SetFloat("Horizontal", Input.GetAxis("Horizontal"));

        movement = new Vector2(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical"));


    }
    void FixedUpdate()
    {

        moveCharacter(movement);
        jumpCharacter();


    }

    void moveCharacter(Vector2 direction)
    {
        rb.velocity = direction * speed;

    }

    void jumpCharacter()
    {
        if(Input.GetKey(KeyCode.Space) && !isJumping)
        {
            isJumping = true;

            rb.AddForce(jumping * jumpForce);
        }
    }

    void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.gameObject.CompareTag("Ground"))
        {
            isJumping = false;
            rb.velocity = Vector2.zero;
        }
    }

}

1 Ответ

0 голосов
/ 28 апреля 2019

У вас есть Input.GetKey(KeyCode.Space). Измените GetKey на GetKeyDown.

Если вы ищете GetKey, то переменная всегда будет истинной, когда вы удерживаете нажатой клавишу. GetKeyDown обеспечивает выполнение кода один раз при каждом нажатии клавиши.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...