Движение WASD в unity2d

Я новичок в единстве и хотел узнать, как настроить клавиши A и D, чтобы перемещать меня right и left с помощью Rigidbody2D. Я нашел этот скрипт на форуме, но он не работает:

public float speed = 5f;
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);
    }
}

person alom 1    schedule 02.03.2020    source источник
comment
- улучшение демонстрации нажатий клавиш - удаление пробелов в кодах - добавление большего количества тегов, чтобы они были доступны и видны большему количеству людей   -  person Babak.Abad    schedule 02.03.2020
comment
Взгляните на метод Input.GetKeyDown(), он должен делать то, что вам нужно.   -  person T_Bacon    schedule 02.03.2020
comment
Что не работает? Ошибка, игрок вообще не двигается или двигается неправильно?   -  person Derek C.    schedule 03.03.2020


Ответы (1)


Возникает ли ошибка?
Первое, что нужно проверить, это то, что то, к чему вы прикрепили этот скрипт, действительно имеет Rigidbody2D.

Физика, т.е. установка скоростей твердого тела, должна выполняться в FixedUpdate, а не в Update, если вы посмотрите на это и сейчас это кажется слишком запутанным, не беспокойтесь, пока вам это сойдет с рук.

Возможно, вам стоит попробовать использовать rb.AddForce(movement * speed, ForceMode2D.Impluse);.

Поскольку переменная movement на самом деле будет положительной или отрицательной в зависимости от того, какую клавишу вы нажмете, первые два бита оператора if не имеют никакого применения.

Попробуйте посмотреть это за одно руководство по перемещению игрока.

person Derek C.    schedule 03.03.2020