Когда я хочу, чтобы мой игрок прыгнул, он летит (Unity2d) - PullRequest
2 голосов
/ 16 июня 2020

Здравствуйте, я хочу сделать свою первую игру в 2D, но когда я хочу прыгнуть, мой игрок летит, и он не возвращается на землю. Я не знаю, почему это не работает. Надеюсь, кто-нибудь сможет мне помочь. Спасибо. Вот мой код:

using UnityEngine;
using System.Collections;
public class Move2D : MonoBehaviour
{
    public float speed = 5f;
    public float jumpSpeed = 8f;
    private float movement = 0f;
    private Rigidbody2D rigidBody;
    // Use this for initialization
    void Start()
    {
        rigidBody = GetComponent<Rigidbody2D>();
    }

    // Update is called once per frame
    void Update()
    {
        movement = Input.GetAxis("Horizontal");
        if (movement > 0f)
        {
            rigidBody.velocity = new Vector2(movement * speed, rigidBody.velocity.y);
        }
        else if (movement < 0f)
        {
            rigidBody.velocity = new Vector2(movement * speed, rigidBody.velocity.y);
        }
        else
        {
            rigidBody.velocity = new Vector2(0, rigidBody.velocity.y);
        }
        if (Input.GetButtonDown("Jump"))
        {
            rigidBody.velocity = new Vector2(rigidBody.velocity.x, jumpSpeed);
        }
    }
}

1 Ответ

3 голосов
/ 16 июня 2020

Вы устанавливаете скорость y при прыжке, но никогда не устанавливаете ее ни на что другое. Я предлагаю использовать для прыжка жесткоеBody.AddForce :

rigidBody.AddForce(transform.up * jumpSpeed, ForceMode2D.Impulse);

Я также должен сказать, что ваш первый if..else if ... else кажется избыточным .

Если движение> 0, вы выполняете X, если движение <0, вы делаете то же самое, и если движение == 0, вы все равно делаете то же самое, даже если вы пишете это по-другому. (Если движение == 0, то движение * скорость также равно 0). Таким образом, вы можете просто указать, что </p>

rigidBody.velocity = new Vector2(movement * speed, rigidBody.velocity.y);

, не используя if вообще.

edit: Я случайно написал неправильную строку для того, что использовать, исправьте это сейчас.

edit2 : Итак, после обоих этих изменений ваша функция обновления будет выглядеть так:

void Update()
{
    movement = Input.GetAxis("Horizontal");
    rigidBody.velocity = new Vector2(movement * speed, rigidBody.velocity.y);

    if (Input.GetButtonDown("Jump"))
    {
        rigidBody.AddForce(transform.up * jumpSpeed, ForceMode2D.Impulse);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...