Плавно отодвинуть твердое тело

1

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

Может кто-нибудь, пожалуйста, скажите мне, чего мне не хватает из моего кода, чтобы это произошло?

void FixedUpdate() 
{

    if(Input.GetMouseButtonDown(0))
    {
        if(Input.mousePosition.x < (Screen.width*2)/3 && Input.mousePosition.y > Screen.height/3)
        {
            if(position == middle)
            {
                MoveLeft();
            }   
        }
    }
}

void MoveLeft()
{
    var pos = rigidbody.position;
    float xPosition = left.transform.position.x;
    pos.x = Mathf.Lerp(pos.x, xPosition, speed * Time.deltaTime);
    rigidbody.position = pos;
}

Мой метод находится в FixedUpdate, потому что я перемещаю игроков жестко, как против перевода фактического игрока.

Теги:
unity3d
input
rigid-bodies

1 ответ

0
Лучший ответ

Прямо сейчас игрок только перемещается, когда вы нажимаете кнопку мыши, потому что это то, как написан ваш код: вы проверяете, нажата ли мышь каждый кадр, и только если он перемещает жесткое тело.

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

Если бы я правильно понял вашу цель, это выглядело бы примерно так:

bool moveLeft = false;

void FixedUpdate() 
{

    if(Input.GetMouseButtonDown(0)
        && (Input.mousePosition.x < (Screen.width*2)/3 && Input.mousePosition.y > Screen.height/3))
    {
        moveLeft = true;
    }

    if (moveLeft
        && (position == middle))
    {
        MoveLeft();
    }
    else
    {
        moveLeft = false;
    }
}

void MoveLeft()
{
    var pos = rigidbody.position;
    float xPosition = left.transform.position.x;
    pos.x = Mathf.Lerp(pos.x, xPosition, speed * Time.deltaTime);
    rigidbody.position = pos;
}
  • 0
    Спасибо за хорошего человека. Я хочу, чтобы мой игрок двигался только тогда, когда пользователь нажимает на левую часть экрана (сейчас я использую щелчок мыши), затем он движется по своему веселому пути, пока не достигнет конечной точки. Я реализовал ваш чек, но он все еще перемещает дробь, когда я нажимаю. Я даже изменил свой ход влево, чтобы использовать Time.fixedDeltatime.
  • 0
    Ну, а почему это останавливается? Он должен вызывать метод MoveLeft () каждый кадр, в то время как moveLeft имеет значение true, что устанавливает его в false?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню